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 " :rolleyes:
CitarRegion " 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
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:Cita de: luis456 en 2 Febrero 2014, 13:14 PMAAA 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!
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' :P
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
Cita de: Eleкtro en 2 Febrero 2014, 18:19 PM
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
Cita de: luis456 en 3 Febrero 2014, 13:15 PM12 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.
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
Cita de: luis456 en 6 Febrero 2014, 20:09 PM
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!
Cita de: Eleкtro en 6 Febrero 2014, 20:31 PM
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
Nah, no soy ningún prodigio como programador ni como tutor, solo es que tengo paciencia xD.
Citarsaltar 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
A petición de elektro :)
Bien este código forma grupos de cuatro en cuatro lo que tiene la variable hasta acabar con todos los números
variable--> 1 2 3 4 5 6 7 8 9 10 11 12 13 estos números pueden llegar asta el 90
el código me muestra ahora esto
1 2 3 4
5 6 7 8
9 10 11 12
Bien la idea es cojer dos numeros 1 2 y combinarlos con 10 y 11 y seguir:
ejemplo
1 2 10 11
3 4 10 11
5 6 10 11
7 8 10 11
9 10 11 12
9 10 11 13
esto se repetiría hasta fin de ciclo
espero se entienda :)
Luis
Difícil ee :silbar:
tambien me serviria algunos ejemplos o rutinas de combinaciones para trastear con ellos a ver que tal
luis