Bien te paso el code con el problema fijate que con " Values " no llega la cantidad para hacer funcionar el " splits(15) " ya que " values " no llega a 35 numeros y me sale lo del error ese de que hablamos en el otro post. " null " y se me ocurrio esta idea que me parece perfecta para mi code jejej
Pero si vamos a "values2" veras que si tiene mas de 35 numeros con lo cual no da problemas el " splits(15) " y tu diras aja y porque no usamos solo values2 ? porque son dos variables que vienen de una funcion y una ves "values " tiene mas que la otra y otras values2 se invierten las cantidades y esto varia segun los calculos que hago.
Pero si vamos a "values2" veras que si tiene mas de 35 numeros con lo cual no da problemas el " splits(15) " y tu diras aja y porque no usamos solo values2 ? porque son dos variables que vienen de una funcion y una ves "values " tiene mas que la otra y otras values2 se invierten las cantidades y esto varia segun los calculos que hago.
Código (vbnet) [Seleccionar]
Public Class Form1
ReadOnly MAX As Integer = 90
Dim Rand As New Random
Dim compuesto As IEnumerable(Of Integer)
Private Sub Test() Handles MyBase.Shown
Dim values As IEnumerable(Of Integer) =
{
1, 2, 3, 4,
5, 6, 10, 11,
14, 15, 54, 57,
58, 60, 63, 64,
65, 67
}
Dim values2 As IEnumerable(Of Integer) =
{
1, 2, 3, 4,
5, 6, 10, 11,
14, 15, 54, 57,
58, 60, 63, 64,
65, 67, 68, 69,
70, 75, 78, 79, 80,
81, 82, 86, 88, 89, 90, 92,
93, 94, 95, 97, 98, 99
}
pondria en donde esta " values " a compuesto
Dim splits As IEnumerable(Of IEnumerable(Of Integer)) =
SplitIntoParts(collection:=values, amount:=2, fillEmpty:=True)
Me.ListBox1.Items.AddRange(splits(0).Cast(Of Object).ToArray)
Me.ListBox2.Items.AddRange(splits(1).Cast(Of Object).ToArray)
Me.ListBox3.Items.AddRange(splits(2).Cast(Of Object).ToArray)
Me.ListBox4.Items.AddRange(splits(3).Cast(Of Object).ToArray)
Me.ListBox5.Items.AddRange(splits(4).Cast(Of Object).ToArray)
Dim concatCol As IEnumerable(Of Integer) = splits(0).Concat(splits(3).Concat(splits(4).Concat(splits(5).Concat(splits(15)))))
Dim distinctCol As IEnumerable(Of Integer) = concatCol.Distinct.Skip(2), Take(10)
Dim selectCol As IEnumerable(Of Integer) = distinctCol.Select(Function(value As Integer)
If value < MAX Then
Return value
Else
Return Rand.Next(1, MAX)
End If
End Function)
ListBox8.Items.AddRange(selectCol.Cast(Of Object).ToArray)
End Sub
Public Shared Function SplitIntoParts(Of T)(ByVal collection As IEnumerable(Of T),
ByVal amount As Integer,
ByVal fillEmpty As Boolean) As IEnumerable(Of IEnumerable(Of T))
Return From index As Integer In Enumerable.Range(0, CInt(Math.Ceiling(collection.Count() / amount)))
Select If(Not fillEmpty,
collection.Skip(index * amount).Take(amount),
If((collection.Count() - (index * amount)) >= amount,
collection.Skip(index * amount).Take(amount),
collection.Skip(index * amount).Take(amount).
Concat(From i As Integer
In Enumerable.Range(0, amount - (collection.Count() - (index * amount)))
Select DirectCast(Nothing, T))))
End Function
End Class