Autor
|
Tema: Combinaciones letras o numeros (Leído 9,020 veces)
|
luis456
Desconectado
Mensajes: 551
|
hola trasteando por la Librería de Snippets encontre este codigo de combinaciones creo es de elektro ahora como ni idea de usar la regiones, si alguien me puede explicar el codigo como funciona la idea es que con un array que ya tengo con datos este codigo me coja de ese array y me los combine y muestre en un listbox estas combinaciones. Mi array se llama " resul " Region " Permute all combinations of characters" ' [ Permute Characters Function ] ' ' Examples : ' Dim Permutations As IEnumerable = Permute_Characters("abc", 2) ' For Each Permutation As IEnumerable(Of Char) In Permutations : RichTextBox1.Text &= vbNewLine & Permutation.ToArray : Next Private Shared Function Permute_Characters(Of T)(list As IEnumerable(Of T), length As Integer) As IEnumerable(Of IEnumerable(Of T)) If length = 1 Then Return list.[Select](Function(x) New T() {x}) Else Return Permute_Characters(list, length - 1).SelectMany(Function(x) list, Function(t1, t2) t1.Concat(New T() {t2})) End If End Function #End Region
AAA y ya estoy con esto del insert code que no me sale joe.... Luis
|
|
« Última modificación: 2 Febrero 2014, 15:57 pm por Eleкtro »
|
En línea
|
Que tu sabiduria no sea motivo de Humillacion para los demas
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
Pero Luis, ¿ has leido el título del snippet? xD, ese método no tiene nada que ver con combinar Arrays (y supongo que después de saber eso ya no te interesará el funcionamiento de las órdenes de LINQ). ( Tienes razón el Snippet lo publiqué yo, pero no es de mi propiedad. ) Las #Regiones sirven básicamente para organizar el código, si te fijas, en la IDE puedes expandir/colapsar una región, y así todo queda más armónico y profesional, no tiene ninguna otra utilidad ...son prácticamente comentarios que puedes eliminar. No sé que más decirte porque semanas atrás ya te habré puesto unos 1.000 códigos diferentes para unir un Array y mostrarlo en un Listbox, el problema hace tiempo que debería estar solucionado pero como no es así postea el código que tienes y el problema que tienes con ese código porque sin problema no puede haber soluciones. ¿Que es lo que pretendes hacer?. EDITO:AAA y ya estoy con esto del insert code que no me sale joe.... ¿Te refieres a insertar un código en el post?, pues para ser sincero yo te he editado todos y cada uno de los códigos que has publicado hasta el día de hoy xD, me das trabajo, no porque hayas infringido las normas ni nada por el estilo, es que símplemente me gusta ver un código con su sintaxis correcta (que nunca la usas xD), por eso no te he dicho nada porque las normas no las has infringido, no hay problema, aunque podrías hacer el favor de usar el tag más apropiado con tanto código que publicas: [code = vbnet] Tu código [ /code] Saludos!
|
|
« Última modificación: 2 Febrero 2014, 16:21 pm por Eleкtro »
|
En línea
|
|
|
|
luis456
Desconectado
Mensajes: 551
|
Bien lo que seria algo como esto pero en código mas bonito jejej y el proyecto viejo lo acabe gracias a todos Ahora quiero es hacer son combinaciones y no de arrays si no de lo que tiene ese array que son numeros del 00 a 99 ... Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim a As Byte Dim b As Byte Dim c As Byte Dim d As Byte Textbox1.Text = "" For a = 1 To 4 For b = 1 To 4 For c = 1 To 4 For d = 1 To 4 If a = b Or a = c Or a = d Or b = c Or b = d Or c = d Then Else TextBox2.Text = TextBox1.Text & a & b & c & d & vbCrLf End If Next d Next c Next b Next a End Sub End Class
Luis (ahora espero antes de pinchar esto ,que salga lo del insert code ) [MOD]: Genial, pero no hagas doble post utiliza el botón 'Modificar'
|
|
« Última modificación: 2 Febrero 2014, 17:46 pm por Eleкtro »
|
En línea
|
Que tu sabiduria no sea motivo de Humillacion para los demas
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
No se si te refieres a hacer algo como esto, porque el ejemplo que has dado con datos de typo Byte , con varios ' For Range' "fijos" del 1 al 4 y esa condicional me sigue pareciendo que tiene poco que ver con la pregunta real. Este código combina todos los elementos de un Array de forma aleatoria, el resultado (en tu caso) son combinaciones de números desordenados. Public Class Form1 ''' <summary> ''' Tu array numérico. ''' </summary> Private IntArray As Integer() = { 10I, 20I, 30I, 40I, 50I, 60I, 70I, 80I, 90I } Private Sub Button1_Click() Handles Button1.Click TextBox2.Text = String.Join("; ", RandomizeArray(IntArray)) ' TextBox2.Text = String.Join(Nothing, RandomizeArray(arr)) End Sub ' By Elektro ' ''' <summary> ''' Randomizes the elements of the given Collection. ''' </summary> ''' <typeparam name="T"></typeparam> ''' <param name="Collection">Indicates the Collection to randomize.</param> ''' <returns>IEnumerable{``0}.</returns> Public Function RandomizeArray (Of T )(ByVal Collection As IEnumerable (Of T )) As IEnumerable (Of T ) Dim Randomizer As New Random Return (From Item As T In Collection Order By Randomizer. Next). ToArray End Function End Class
|
|
« Última modificación: 2 Febrero 2014, 18:31 pm por Eleкtro »
|
En línea
|
|
|
|
luis456
Desconectado
Mensajes: 551
|
No se si te refieres a hacer algo como esto, porque el ejemplo que has dado con datos de typo Byte , con varios ' For Range' "fijos" del 1 al 4 y esa condicional me sigue pareciendo que tiene poco que ver con la pregunta real. Este código combina todos los elementos de un Array de forma aleatoria, el resultado (en tu caso) son combinaciones de números desordenados. Public Class Form1 ''' <summary> ''' Tu array numérico. ''' </summary> Private IntArray As Integer() = { 10I, 20I, 30I, 40I, 50I, 60I, 70I, 80I, 90I } Private Sub Button1_Click() Handles Button1.Click TextBox2.Text = String.Join("; ", RandomizeArray(IntArray)) ' TextBox2.Text = String.Join(Nothing, RandomizeArray(arr)) End Sub ' By Elektro ' ''' <summary> ''' Randomizes the elements of the given Collection. ''' </summary> ''' <typeparam name="T"></typeparam> ''' <param name="Collection">Indicates the Collection to randomize.</param> ''' <returns>IEnumerable{``0}.</returns> Public Function RandomizeArray (Of T )(ByVal Collection As IEnumerable (Of T )) As IEnumerable (Of T ) Dim Randomizer As New Random Return (From Item As T In Collection Order By Randomizer. Next). ToArray End Function End Class
Ok ya con esto que me dio elektro medio hice algo jejej bien introduzco el numero y me los combina . pero siempre hay pero jeje nesecito saber como hacer para que me los muestre de esta forma 121355 <ahora me los muestra de esta forma 12 13 55 <--asi es que me hacen falta y pudiendo limitar la cantidad de números a mostrar esto es que solo me muestre digamos cuatro pares de numeros.los demas que sobran los combine en otra linea hasta acabar con los numeros Public Class Form1 Private TextBoxes As TextBox() = {Nothing} Private Result1 As Int32() Private _textBox As Object Private Property ListBox1Count As Integer Private Property Calcular As Object Private Property TextBox(ByVal TextBoxCount As Short) As Object Get Return _textBox End Get Set(ByVal value As Object) _textBox = value End Set End Property ReadOnly Property Num1 As Int32 Get Return CInt(TextBox1.Text) End Get End Property Private Sub Sumar(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click Result1 = {Num1 + 10, Num1 + 20, Num1 + 30} _ .Distinct().ToArray End Sub Private Sub Button1_Click() Handles Button1.Click TextBox2.Text = String.Join(Nothing, RandomizeArray(Result1)) End Sub Public Function RandomizeArray (Of T )(ByVal Collection As IEnumerable (Of T )) As IEnumerable (Of T ) Dim Randomizer As New Random Return (From Item As T In Collection Order By Randomizer. Next). ToArray End Function End Class
|
|
|
En línea
|
Que tu sabiduria no sea motivo de Humillacion para los demas
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
12 13 55 <--asi es que me hacen falta ¿Y esta linea no te dice nada?: TextBox2.Text = String.Join("; ", RandomizeArray(IntArray))
...Es que vamos!!!, Luis, joer... esta claro q no hay manera... Para separar los números por un espacio, pues, muy óbviamente, debes modificar el string que usas como separador: String.Join(Separador, Colección) Ejemplo: MsgBox(String.Join(Convert.ToChar(Keys.Space), {1I, 2I, 3I, 4I, 5I}.ToArray))
Y para lo de seleccionar "pares" de elementos no te aconsejo hacelro desde la función, haz las cosas de forma ordenada, primero desordenas todos los elementos del array, y luego ese array desordenado (que contiene todos los números) lo usas para ir sacando los que quieras ...esto lo puedes automatizar con un For o usando Linq: Public Class Form1 Private Shadows Sub Shown() Handles MyBase.Shown Dim Elementos As Integer() = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 } For X As Integer = 0 To Elementos.Count - 1 Step 4 MessageBox.Show( String.Format("{0} {1} {2} {3}", Elementos(X), If(Not (X + 1) >= Elementos.Count, Elementos(X + 1), String.Empty), If(Not (X + 2) >= Elementos.Count, Elementos(X + 2), String.Empty), If(Not (X + 3) >= Elementos.Count, Elementos(X + 3), String.Empty), "Cuatro Elementos" ) ) Next X Application.Exit() End Sub End Class
O puedes hacerlo de forma mas manual: Public Class Form1 Private Sub Form1_Load() Handles MyBase.Load Dim Elementos As Integer() = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 } Dim Cantidad As Integer = 4 Dim Primeros_Cuatro_Elementos As Integer() = (From Elemento As Integer In Elementos Take Cantidad).ToArray Dim Siguientes_Cuatro_Elementos As Integer() = (From Elemento As Integer In Elementos Skip Primeros_Cuatro_Elementos.Count Take Cantidad).ToArray Dim Todo_El_Resto_De_Elementos As Integer() = (From Elemento As Integer In Elementos Skip Primeros_Cuatro_Elementos.Count _ + Siguientes_Cuatro_Elementos.Count).ToArray MessageBox.Show(String.Join(Convert.ToChar(Keys.Space), Primeros_Cuatro_Elementos), "Primeros_Cuatro_Elementos") MessageBox.Show(String.Join(Convert.ToChar(Keys.Space), Siguientes_Cuatro_Elementos), "Siguientes_Cuatro_Elementos") MessageBox.Show(String.Join(Convert.ToChar(Keys.Space), Todo_El_Resto_De_Elementos), "Todo_El_Resto_De_Elementos") Application.Exit() End Sub End Class
Saludos.
|
|
« Última modificación: 3 Febrero 2014, 19:10 pm por Eleкtro »
|
En línea
|
|
|
|
luis456
Desconectado
Mensajes: 551
|
Bueno después de trastear con este código de elektro logre adaptarlo a mi nuevo proyecto y funciona pero tengo ahora esta pega. como muestro en ves de un mesaggebox los resultados en un listbox ? ya que trato con " ListBox1.Items.AddRange(Result1.Cast(Of Object).ToArray) " pero solo me muestra una sola combiancion y este codigo muestra tres mesaggebox Codigo que estoy usando Public Class Form1 Private Shadows Sub Shown() Handles MyBase.Shown Dim Elementos As Integer() = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 } For X As Integer = 0 To Elementos.Count - 1 Step 4 MessageBox.Show( String.Format("{0} {1} {2} {3}", Elementos(X), If(Not (X + 1) >= Elementos.Count, Elementos(X + 1), String.Empty), If(Not (X + 2) >= Elementos.Count, Elementos(X + 2), String.Empty), If(Not (X + 3) >= Elementos.Count, Elementos(X + 3), String.Empty), "Cuatro Elementos" ) ) Next X Application.Exit() End Sub End Class
Luis
|
|
« Última modificación: 6 Febrero 2014, 20:25 pm por luis456 »
|
En línea
|
Que tu sabiduria no sea motivo de Humillacion para los demas
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
For X As Integer = 0 To Elementos.Count - 1 Step 4 MessageBox.Show( String.Format("{0} {1} {2} {3}", Elementos(X), If(Not (X + 1) >= Elementos.Count, Elementos(X + 1), String.Empty), If(Not (X + 2) >= Elementos.Count, Elementos(X + 2), String.Empty), If(Not (X + 3) >= Elementos.Count, Elementos(X + 3), String.Empty), "Cuatro Elementos")) Next X
Fíjate bien en los cambios, esto puedes hacerlo sin ayuda For X As Integer = 0 To Elementos.Count - 1 Step 4 ListBox1.Items.Add( String.Format("{0} {1} {2} {3}", Elementos(X), If(Not (X + 1) >= Elementos.Count, Elementos(X + 1), String.Empty), If(Not (X + 2) >= Elementos.Count, Elementos(X + 2), String.Empty), If(Not (X + 3) >= Elementos.Count, Elementos(X + 3), String.Empty))) Next X
Saludos!
|
|
|
En línea
|
|
|
|
luis456
Desconectado
Mensajes: 551
|
Fíjate bien en los cambios, esto puedes hacerlo sin ayuda For X As Integer = 0 To Elementos.Count - 1 Step 4 ListBox1.Items.Add( String.Format("{0} {1} {2} {3}", Elementos(X), If(Not (X + 1) >= Elementos.Count, Elementos(X + 1), String.Empty), If(Not (X + 2) >= Elementos.Count, Elementos(X + 2), String.Empty), If(Not (X + 3) >= Elementos.Count, Elementos(X + 3), String.Empty))) Next X
Saludos! Chupado gracias electro a este paso podre decir que estoy con el mejor maestro ahora vere como saltar las combinaciones para que no sean seguidas pero lo tratare de hacer yo mismo.rompiendo se aprende Luis
|
|
|
En línea
|
Que tu sabiduria no sea motivo de Humillacion para los demas
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
Nah, no soy ningún prodigio como programador ni como tutor, solo es que tengo paciencia xD. saltar las combinaciones para que no sean seguidas Creo que tarde o temprano vas a acabar preguntándolo, mejor hazlo ahora, aquí estamos para ayudar... pero si lo preguntas haz el favor de explicarlo con detalles, no de esa manera que he citado porque no hay quien lo entienda xD. Saludos
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Programa que entretege todas las combinaciones posibles de letras de una palabra
Programación C/C++
|
freakx
|
0
|
5,584
|
23 Enero 2012, 04:55 am
por freakx
|
|
|
Como saber todas las combinaciones posibles de letras y numeros?
Programación C/C++
|
peterfly
|
8
|
29,428
|
15 Julio 2012, 18:26 pm
por DickGumshoe
|
|
|
formar combinaciones de 7 y 8 numeros con 25 numeros
« 1 2 ... 5 6 »
.NET (C#, VB.NET, ASP)
|
luis456
|
51
|
31,616
|
31 Octubre 2014, 17:48 pm
por luis456
|
|
|
Duda acerca del calculo de combinaciones de numeros y letras en vb.net 2010
.NET (C#, VB.NET, ASP)
|
arturoro
|
5
|
4,328
|
20 Diciembre 2015, 07:33 am
por Eleкtro
|
|
|
Como puedo tener todas las combinaciones de letras?
Scripting
|
Pregma Sogma
|
7
|
8,953
|
31 Enero 2017, 19:06 pm
por Yidu
|
|