Bueno otro de mis inventos chungos
tengo una variable x2 integer que contiene x (es variable la cantidad) de numeros que contendria esta variable, ya saben el famoso 00 al 99 y quiero asignar a otras variables digamos variable lx1 los primeros cuatro numeros de la variable x2 y despues los siguientes otros cuatro numeros a otra variable lx2 y a si con todos los numeros de la variable x2 hasta acabar con todos,
Espero se entienda :)
Gracias
Luis
Muestranos por lo menos algo de código que hayas intentado hacer porque parece que quieres que te hagan la tarea jaja ;P .
Pero bueno, así a voz de pronto (no te voy a poner código) te podría sugerir almacenar los numeros del 00 al 99 en un vector y otro vector con las variables que vamos a utilizar para copiar los datos. Hecho esto haces un ciclo for que recorra desde el 00 al 99. Dentro del ciclo habría un puntero que apuntaría a la dirección de memoria de la variable donde quieres copiar los datos. La magia del ejercicio sería hacer una condición del tipo if(i%4==0)(siendo i el contador del ciclo for), y cuando esta condicion se cumpla cambiaríamos la posicion de memoria a la que apunta nuestro puntero a la dirección de memoria de otra variable en nuestro vector de variables. Creo que más o menos si sigues estas instrucciones encontrarás el resultado que quieres.
Si no he entendido mal, tienes una colección de números cómo esta:
Dim collection As IEnumerable(Of Integer) = Enumerable.Range(1, 99)
Y quieres partirlo en colecciones de 4 elementos cada una:
Dim parts As Integer = 4
Pues, cómo siempre te digo, usa LINQ:
Dim result As IEnumerable(Of IEnumerable(Of Integer)) =
From index As Integer
In Enumerable.Range(0, CInt(Math.Ceiling(collection.Count() / parts)))
Select collection.Skip(index * parts).Take(parts)
Saludos
Cita de: Eleкtro en 4 Marzo 2015, 09:43 AM
Si no he entendido mal, tienes una colección de números cómo esta:
Dim collection As IEnumerable(Of Integer) = Enumerable.Range(1, 99)
Y quieres partirlo en colecciones de 4 elementos cada una:
Dim parts As Integer = 4
Pues, cómo siempre te digo, usa LINQ:
Dim result As IEnumerable(Of IEnumerable(Of Integer)) =
From index As Integer
In Enumerable.Range(0, CInt(Math.Ceiling(collection.Count() / parts)))
Select collection.Skip(index * parts).Take(parts)
Saludos
Bueno como soy un poco subnormal con esto, estaba modificando la función que entrega los números en variables apartes usando para limitar con " take = 4) y después concatenando las variables resultantes ???? toda una chapuza jejej
Me he puesto con tu codigo pero siempre me pasa lo mismo al mostrar :(
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim collection As IEnumerable(Of Integer) = Enumerable.Range(1, 99)
Dim parts As Integer = 4
Dim result As IEnumerable(Of IEnumerable(Of Integer)) =
From index As Integer
In Enumerable.Range(0, CInt(Math.Ceiling(collection.Count() / parts)))
Select collection.Skip(index * parts).Take(parts)
ListBox1.Items.AddRange(parts.Cast(Of Object).ToArray) <----error como siempre
End Sub
Luis
Cita de: luis456 en 5 Marzo 2015, 11:55 AMListBox1.Items.AddRange(parts.Cast(Of Object).ToArray) <----error como siempre
Ese error ya lo sufriste anteriormente por la mimsa causa y te expliqué el motivo.
Primero de nada, en el código que he citado, al método
ListBox.Items.AddRange() le estás pasando la variable '
parts' que solo es un simple valor
Integer, así que voy a hacer cómo que no he leido eso y vamos a suponer que al método le pasas la variable '
result', que es en realidad lo que le querrías intentar pasar, quedando así:
ListBox1.Items.AddRange(result.Cast(Of Object).ToArray)
El método
ListBox.Items.AddRange() espera que le pases como parámetro un array de objetos (una colección de strings por ejemplo,
IEnumerable(Of String).Cast(Of Object).ToArray, o un array,
New Object() {1,2,3}).
Pero '
result' es una colección que contiene sub-colecciones (
IEnumerable(Of IEnumerable(Of T)) ), no es un tipo de valor que vayas a poder visualizar en el listbox, por que tienes que pasarle un array que contenga los elementos que quieras mostrar (los valores
Integer), no pasarle un array que contenga más arrays.
piensa, ¿qué debes hacer?, ¿debo volver a decírte lo que siempre te digo qué debes usar para resolver la mayoría de los problemas que tienes? (eso ha sido una pista), jeje.
Saludos!
Cita de: Eleкtro en 5 Marzo 2015, 13:03 PM
Ese error ya lo sufriste anteriormente por la mimsa causa y te expliqué el motivo.
Primero de nada, en el código que he citado, al método ListBox.Items.AddRange() le estás pasando la variable 'parts' que solo es un simple valor Integer, así que voy a hacer cómo que no he leido eso y vamos a suponer que al método le pasas la variable 'result', que es en realidad lo que le querrías intentar pasar, quedando así:
ListBox1.Items.AddRange(result.Cast(Of Object).ToArray)
El método ListBox.Items.AddRange() espera que le pases como parámetro un array de objetos (una colección de strings por ejemplo, IEnumerable(Of String).Cast(Of Object).ToArray, o un array, New Object() {1,2,3}).
Pero 'result' es una colección que contiene sub-colecciones ( IEnumerable(Of IEnumerable(Of T)) ), no es un tipo de valor que vayas a poder visualizar en el listbox, por que tienes que pasarle un array que contenga los elementos que quieras mostrar (los valores Integer), no pasarle un array que contenga más arrays.
piensa, ¿qué debes hacer?, ¿debo volver a decírte lo que siempre te digo qué debes usar para resolver la mayoría de los problemas que tienes? (eso ha sido una pista), jeje.
Saludos!
Hola ya se LINQ: LINQ: LINQ: jejej no se donde esta ese código que me hiciste que es parecido a esto, lo unico que me acuerdo es que tengo que crear una nueva lista (no se si me vuelvo a equivocar jeje ) por cierto he estado estudiando lo de LINQ: y me tope con esto que se parece a lo que estuvimos haciendo la otra ves lo malo es que puedo ir creando uno por uno modificando la condiciones pero se me hace muyyy largo jejej esto es muy similar a lo que quiero hacer
Codigo
' mostrar lo que quiera de dos en dos o tres en tres.
Dim numbers() As Integer = {0, 1, 2, 3, 4, 5, 6, 10, 15, 20, 25, 30, 35, 45}
'
Dim evensQuery = From num In numbers
Where num Mod 2 = 1
Select num
ListBox2.Items.AddRange(evensQuery.Cast(Of Object).ToArray)
muestra
1
3
5
15
25
35
45
Como veras salta de tres entres 1 3 5 etc pero esto solo lo hace una ves, la pregunta es como se podría hacer para que haga lo mismo (bucle imagino ) arranque con lo mismo pero desde el siguiente numero en este caso el numero 2 4 6 15 25 35 45 y aci con todos
luis
Cita de: Eleкtro en 5 Marzo 2015, 13:03 PM
Ese error ya lo sufriste anteriormente por la mimsa causa y te expliqué el motivo.
Primero de nada, en el código que he citado, al método ListBox.Items.AddRange() le estás pasando la variable 'parts' que solo es un simple valor Integer, así que voy a hacer cómo que no he leido eso y vamos a suponer que al método le pasas la variable 'result', que es en realidad lo que le querrías intentar pasar, quedando así:
ListBox1.Items.AddRange(result.Cast(Of Object).ToArray)
El método ListBox.Items.AddRange() espera que le pases como parámetro un array de objetos (una colección de strings por ejemplo, IEnumerable(Of String).Cast(Of Object).ToArray, o un array, New Object() {1,2,3}).
Pero 'result' es una colección que contiene sub-colecciones ( IEnumerable(Of IEnumerable(Of T)) ), no es un tipo de valor que vayas a poder visualizar en el listbox, por que tienes que pasarle un array que contenga los elementos que quieras mostrar (los valores Integer), no pasarle un array que contenga más arrays.
piensa, ¿qué debes hacer?, ¿debo volver a decírte lo que siempre te digo qué debes usar para resolver la mayoría de los problemas que tienes? (eso ha sido una pista), jeje.
Saludos!
Bueno dejando lo otro vuelvo al problema inicial por mas que miro Linq en msdn.microsoft.com no logro controlar esto lo unico que he podido hacer es mostrar los numeros jejej y revizando los codigos de elektro lo que consegui fue el ejemplo pero era para combinar
codigo
Dim collection As IEnumerable(Of Integer) = Enumerable.Range(1, 99)
Dim parts As Integer = 4
Dim result As IEnumerable(Of IEnumerable(Of Integer)) =
From index As Integer
In Enumerable.Range(0, CInt(Math.Ceiling(collection.Count() / parts)))
Select collection.Skip(index * parts).Take(parts)
ListBox5.Items.Add(String.Join(", ", From index As Integer In collection
Select If(index.ToString.Length = 1I,
index.ToString.Insert(0I, "0"c),
index.ToString)))
Luis
A ver que estoy mal ? he probado y reprobado y no me sale
' Dim collection As IEnumerable(Of Integer) = Enumerable.Range(1, 11)
Dim collection() As Integer = {1, 2, 3, 4, 5, 6, 10, 15, 20, 22, 24, 25, 30, 35, 45, 47, 50, 54, 57, 58, 60, 67, 68, 69, 70, 71, 75, 77, 79, 80}
Dim parts As Integer = 4
Dim result As IEnumerable(Of IEnumerable(Of Integer)) =
From index As Integer
In Enumerable.Range(0, CInt(Math.Ceiling(collection.Count() / parts)))
Select collection.Skip(index * parts).Take(parts)
Dim dinosaurs As New List(Of Integer)(parts)
ListBox5.Items.AddRange(dinosaurs.Cast(Of Object).ToArray)
Luis
Tienes la colección estática y principal, con nombre 'mainCol'.
' La colección principal.
Dim mainCol As IEnumerable(Of Integer) =
{
1, 2, 3, 4,
5, 6, 10, 15,
20, 22, 24, 25,
30, 35, 45, 47,
50, 54, 57, 58,
60, 67, 68, 69,
70, 71, 75, 77,
79, 80
}
Tienes la colección principal, dividida en una colección que contiene colecciones de 4 elementos (total: 8 sub-colecciones), con nombre 'splittedCols'.
' La colección principal, dividida en una colección que contiene colecciones de 4 elementos (total: 8 colecciones).
Dim parts As Integer = 4
Dim splittedCols As IEnumerable(Of IEnumerable(Of Integer)) =
From index As Integer In Enumerable.Range(0, CInt(Math.Ceiling(mainCol.Count() / parts)))
Select mainCol.Skip(index * parts).Take(parts)
Y ahora, ¿que estás intentando hacer, unirla de nuevo?.
(Esto sería una forma rebuscada y poco optimizada, no se me ocurre nada mejor ahora mismo usando LINQ, pero puedes optimizarlo usando un FOR corriente de toda la vida, no ForEach)
' Las 8 colecciones de 4 elementos cada una, unidas en una sola colección:
Dim joinedCol As IEnumerable(Of Integer) = {}
splittedCols.ToList.ForEach(Sub(col As IEnumerable(Of Integer))
joinedCol = joinedCol.Concat(col)
End Sub)
ListBox1.Items.AddRange(joinedCol.Cast(Of Object)().ToArray)
PD: Intenta ser específico.
Saludos!
Cita de: Eleкtro en 8 Marzo 2015, 10:35 AM
Tienes la colección estática y principal, con nombre 'mainCol'.
' La colección principal.
Dim mainCol As IEnumerable(Of Integer) =
{
1, 2, 3, 4,
5, 6, 10, 15,
20, 22, 24, 25,
30, 35, 45, 47,
50, 54, 57, 58,
60, 67, 68, 69,
70, 71, 75, 77,
79, 80
}
Tienes la colección principal, dividida en una colección que contiene colecciones de 4 elementos (total: 8 sub-colecciones), con nombre 'splittedCols'.
' La colección principal, dividida en una colección que contiene colecciones de 4 elementos (total: 8 colecciones).
Dim parts As Integer = 4
Dim splittedCols As IEnumerable(Of IEnumerable(Of Integer)) =
From index As Integer In Enumerable.Range(0, CInt(Math.Ceiling(mainCol.Count() / parts)))
Select mainCol.Skip(index * parts).Take(parts)
Y ahora, ¿que estás intentando hacer, unirla de nuevo?.
(Esto sería una forma rebuscada y poco optimizada, no se me ocurre nada mejor ahora mismo usando LINQ, pero puedes optimizarlo usando un FOR corriente de toda la vida, no ForEach)
' Las 8 colecciones de 4 elementos cada una, unidas en una sola colección:
Dim joinedCol As IEnumerable(Of Integer) = {}
splittedCols.ToList.ForEach(Sub(col As IEnumerable(Of Integer))
joinedCol = joinedCol.Concat(col)
End Sub)
ListBox1.Items.AddRange(joinedCol.Cast(Of Object)().ToArray)
PD: Intenta ser específico.
Saludos!
Funciona bien pero :
Pregunta " Y ahora, ¿que estás intentando hacer, unirla de nuevo? " NO jejej si todavía no he logrado hacer lo que en principio quería hacer, que era dividir la colección principal en variables con cuatro números cada una para yo después con cada variable con los números asignados poder concatenar las que yo quiera entre ellas y mostrar ese resultado en un listbox
variable principal con números
Dim mainCol As IEnumerable(Of Integer) =
{
1, 2, 3, 4,
5, 6, 10, 15,
20, 22, 24, 25,
30, 35, 45, 47,
50, 54, 57, 58,
60, 67, 68, 69,
70, 71, 75, 77,
79, 80
}
cada cuatro números se la asignamos a una variable
variable1 =1 2 3 4
variable2 = 5 6 10 15
variable3 = 20 22 24 24
etec etec
mostrar variable1 en listbox1
mostrar variable2 en listbox2
Gracias Elektro por tu ayuda y como me pediste mas especifico jejej
Luis
Cita de: luis456 en 8 Marzo 2015, 12:50 PMtodavía no he logrado hacer lo que en principio quería hacer, que era dividir la colección principal en variables con cuatro números cada una
¿Cómo que no?:
CitarDim parts As Integer = 4
Dim splittedCols As IEnumerable(Of IEnumerable(Of Integer)) =
From index As Integer In Enumerable.Range(0, CInt(Math.Ceiling(mainCol.Count() / parts)))
Select mainCol.Skip(index * parts).Take(parts)
Cita de: luis456 en 8 Marzo 2015, 12:50 PMpara yo después con cada variable con los números asignados poder concatenar las que yo quiera entre ellas y mostrar ese resultado en un listbox
dim combination as ienumerable(of integer) = splittedCols(Índice).Concat(splittedCols(Índice))
¿eso?
Saludos
EDITO:Te pondré el primer problema más fácil con esta función genérica (lee el ejemplo de uso):
''' <remarks>
''' *****************************************************************
''' Snippet Title: Split Collection Into Parts
''' Code's Author: Elektro
''' Date Modified: 08-March-2015
''' Usage Example:
''' Dim mainCol As IEnumerable(Of Integer) = {1, 2, 3, 4, 5, 6, 7, 8, 9}
''' Dim splittedCols As IEnumerable(Of IEnumerable(Of Integer)) = SplitColIntoParts(mainCol, amount:=4)
''' splittedCols.ToList.ForEach(Sub(col As IEnumerable(Of Integer))
''' Debug.WriteLine(String.Join(", ", col))
''' End Sub)
''' *****************************************************************
''' </remarks>
''' <summary>
''' Splits an <see cref="IEnumerable(Of T)"/> into the specified amount of parts.
''' </summary>
''' <typeparam name="T"></typeparam>
''' <param name="collection">The collection to split.</param>
''' <param name="amount">The parts amount.</param>
''' <returns>IEnumerable(Of IEnumerable(Of T)).</returns>
Public Shared Function SplitColIntoParts(Of T)(ByVal collection As IEnumerable(Of T),
ByVal amount As Integer) As IEnumerable(Of IEnumerable(Of T))
Return From index As Integer
In Enumerable.Range(0, CInt(Math.Ceiling(collection.Count() / amount)))
Select collection.Skip(index * amount).Take(amount)
End Function
Jo cada ves me vuelvo mas loco , te paso lo que estoy tratando de hacer de una forma que me sea mas facil
Dim numbers() As Integer = {0, 1, 2, 3, 4, 5, 6, 10, 15, 20, 25, 30, 35, 45} <---estos numeros cambian o son mas o son menos cantidad
quiero poner esos numeros en estas variables ??
a= 1 2 3 4
b= 3 5 10 15
c= 20 25 30 35
Dim Result As IEnumerable(Of Integer) =
(a.Concat(b.Concat(c))). <---------------para concatenar a +b c+a etc cada ves que quiera
Distinct.
ListBox4.Items.AddRange(Resul.Cast(Of Object).ToArray)
Gracias
Luis
ahá, ¿y que relacion hay entre el patrón que sigue "a", y el que sigue "b"?.
Cita de: Eleкtro en 8 Marzo 2015, 15:55 PM
ahá, ¿y que relacion hay entre el patrón que sigue "a", y el que sigue "b"?.
Ninguno puse eso sin tomar en cuenta que era correlativo jejje se supone que es a+c y como son muchos numeros que da la funcion son muchas las variables y lo puse corto
y seria como esto
A + C
A + D
B + C
B + D
C + D
o mas cuando lo termine (no pongo todos ) :)
1 .- ( A + C + D )
2 .- ( A + B + D )
3 .- ( A + B + E )
4 .- ( A + B + F )
5 .- ( A + B + G )
6 .- ( A + B + H )
7 .- ( A + C + D )
8 .- ( A + C + E )
9 .- ( A + C + F )
10 .- ( A + C + G )
11 .- ( A + C + H )
12 .- ( A + D + E )
13 .- ( A + D + F )
14 .- ( A + D + G )
15 .- ( A + D + H )
16 .- ( A + E + F )
17 .- ( A + E + G )
18 .- ( A + E + H )
19 .- ( A + F + G )
20 .- ( A + F + H )
21 .- ( A + G + H )
22 .- ( B + C + D )
23 .- ( B + C + E )
24 .- ( B + C + F )
25 .- ( B + C + G )
26 .- ( B + C + H )
27 .- ( B + D + E )
28 .- ( B + D + F )
29 .- ( B + D + G )
30 .- ( B + D + H )
31 .- ( B + E + F )
32 .- ( B + E + G )
33 .- ( B + E + H )
34 .- ( B + F + G )
35 .- ( B + F + H )
36 .- ( B + G + H )
37 .- ( C + D + E )
38 .- ( C + D + F )
39 .- ( C + D + G )
40 .- ( C + D + H )
41 .- ( C + E + F )
42 .- ( C + E + G )
43 .- ( C + E + H )
44 .- ( C + F + G )
45 .- ( C + F + H )
46 .- ( C + G + H )
47 .- ( D + E + F )
48 .- ( D + E + G )
49 .- ( D + E + H )
50 .- ( D + F + G )
51 .- ( D + F + H )
52 .- ( D + G + H )
53 .- ( E + F + G )
54 .- ( E + F + H )
55 .- ( E + G + H )
56 .- ( F + G + H )
etec etec etec
Luis