Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: luis456 en 3 Marzo 2015, 23:07 pm



Título: Otra de las mias jejje traspasar datos condicionados de una variable a otras
Publicado por: luis456 en 3 Marzo 2015, 23:07 pm
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





Título: Re: Otra de las mias jejje traspasar datos condicionados de una variable a otras
Publicado por: MCLucro en 3 Marzo 2015, 23:19 pm
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.


Título: Re: Otra de las mias jejje traspasar datos condicionados de una variable a otras
Publicado por: Eleкtro en 4 Marzo 2015, 09:43 am
Si no he entendido mal, tienes una colección de números cómo esta:
Código
  1. Dim collection As IEnumerable(Of Integer) = Enumerable.Range(1, 99)

Y quieres partirlo en colecciones de 4 elementos cada una:
Código
  1. Dim parts As Integer = 4

Pues, cómo siempre te digo, usa LINQ:
Código
  1. Dim result As IEnumerable(Of IEnumerable(Of Integer)) =
  2.    From index As Integer
  3.    In Enumerable.Range(0, CInt(Math.Ceiling(collection.Count() / parts)))
  4.    Select collection.Skip(index * parts).Take(parts)

Saludos


Título: Re: Otra de las mias jejje traspasar datos condicionados de una variable a otras
Publicado por: luis456 en 5 Marzo 2015, 11:55 am
Si no he entendido mal, tienes una colección de números cómo esta:
Código
  1. Dim collection As IEnumerable(Of Integer) = Enumerable.Range(1, 99)

Y quieres partirlo en colecciones de 4 elementos cada una:
Código
  1. Dim parts As Integer = 4

Pues, cómo siempre te digo, usa LINQ:
Código
  1. Dim result As IEnumerable(Of IEnumerable(Of Integer)) =
  2.    From index As Integer
  3.    In Enumerable.Range(0, CInt(Math.Ceiling(collection.Count() / parts)))
  4.    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 :(

Código
  1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  2.  
  3.        Dim collection As IEnumerable(Of Integer) = Enumerable.Range(1, 99)
  4.  
  5.        Dim parts As Integer = 4
  6.  
  7.  
  8.        Dim result As IEnumerable(Of IEnumerable(Of Integer)) =
  9.    From index As Integer
  10.    In Enumerable.Range(0, CInt(Math.Ceiling(collection.Count() / parts)))
  11.    Select collection.Skip(index * parts).Take(parts)
  12.  
  13.        ListBox1.Items.AddRange(parts.Cast(Of Object).ToArray) <----error como siempre
  14.  
  15.    End Sub


Luis










Título: Re: Otra de las mias jejje traspasar datos condicionados de una variable a otras
Publicado por: Eleкtro en 5 Marzo 2015, 13:03 pm
Código
  1. ListBox1.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í:
Código
  1. 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!


Título: Re: Otra de las mias jejje traspasar datos condicionados de una variable a otras
Publicado por: luis456 en 5 Marzo 2015, 15:32 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í:
Código
  1. 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
Código
  1. ' mostrar lo que quiera de dos en dos o tres en tres.
  2.        Dim numbers() As Integer = {0, 1, 2, 3, 4, 5, 6, 10, 15, 20, 25, 30, 35, 45}
  3.  
  4.        '
  5.        Dim evensQuery = From num In numbers
  6.                         Where num Mod 2 = 1
  7.                         Select num
  8.  
  9.        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



Título: Re: Otra de las mias jejje traspasar datos condicionados de una variable a otras
Publicado por: luis456 en 7 Marzo 2015, 16:30 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í:
Código
  1. 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

Código
  1. Dim collection As IEnumerable(Of Integer) = Enumerable.Range(1, 99)
  2.  
  3.        Dim parts As Integer = 4
  4.  
  5.  
  6.        Dim result As IEnumerable(Of IEnumerable(Of Integer)) =
  7.    From index As Integer
  8.    In Enumerable.Range(0, CInt(Math.Ceiling(collection.Count() / parts)))
  9.    Select collection.Skip(index * parts).Take(parts)
  10.  
  11.        ListBox5.Items.Add(String.Join(", ", From index As Integer In collection
  12.                                                                      Select If(index.ToString.Length = 1I,
  13.                                                                                index.ToString.Insert(0I, "0"c),
  14.                                                                                index.ToString)))




Luis




Título: Re: Otra de las mias jejje traspasar datos condicionados de una variable a otras
Publicado por: luis456 en 8 Marzo 2015, 09:22 am
A ver que estoy mal ? he probado y reprobado y no me sale

Código
  1. '  Dim collection As IEnumerable(Of Integer) = Enumerable.Range(1, 11)
  2.        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}
  3.  
  4.        Dim parts As Integer = 4
  5.  
  6.  
  7.        Dim result As IEnumerable(Of IEnumerable(Of Integer)) =
  8.    From index As Integer
  9.    In Enumerable.Range(0, CInt(Math.Ceiling(collection.Count() / parts)))
  10.    Select collection.Skip(index * parts).Take(parts)
  11.  
  12.        Dim dinosaurs As New List(Of Integer)(parts)
  13.  
  14.        ListBox5.Items.AddRange(dinosaurs.Cast(Of Object).ToArray)


Luis


Título: Re: Otra de las mias jejje traspasar datos condicionados de una variable a otras
Publicado por: Eleкtro en 8 Marzo 2015, 10:35 am
Tienes la colección estática y principal, con nombre 'mainCol'.

Código
  1.        ' La colección principal.
  2.        Dim mainCol As IEnumerable(Of Integer) =
  3.            {
  4.                1, 2, 3, 4,
  5.                5, 6, 10, 15,
  6.                20, 22, 24, 25,
  7.                30, 35, 45, 47,
  8.                50, 54, 57, 58,
  9.                60, 67, 68, 69,
  10.                70, 71, 75, 77,
  11.                79, 80
  12.            }

Tienes la colección principal, dividida en una colección que contiene colecciones de 4 elementos (total: 8 sub-colecciones), con nombre 'splittedCols'.

Código
  1.        ' La colección principal, dividida en una colección que contiene colecciones de 4 elementos (total: 8 colecciones).
  2.        Dim parts As Integer = 4
  3.        Dim splittedCols As IEnumerable(Of IEnumerable(Of Integer)) =
  4.            From index As Integer In Enumerable.Range(0, CInt(Math.Ceiling(mainCol.Count() / parts)))
  5.            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)
Código
  1.        ' Las 8 colecciones de 4 elementos cada una, unidas en una sola colección:
  2.        Dim joinedCol As IEnumerable(Of Integer) = {}
  3.        splittedCols.ToList.ForEach(Sub(col As IEnumerable(Of Integer))
  4.                                        joinedCol = joinedCol.Concat(col)
  5.                                    End Sub)

Código
  1. ListBox1.Items.AddRange(joinedCol.Cast(Of Object)().ToArray)

PD: Intenta ser específico.

Saludos!


Título: Re: Otra de las mias jejje traspasar datos condicionados de una variable a otras
Publicado por: luis456 en 8 Marzo 2015, 12:50 pm
Tienes la colección estática y principal, con nombre 'mainCol'.

Código
  1.        ' La colección principal.
  2.        Dim mainCol As IEnumerable(Of Integer) =
  3.            {
  4.                1, 2, 3, 4,
  5.                5, 6, 10, 15,
  6.                20, 22, 24, 25,
  7.                30, 35, 45, 47,
  8.                50, 54, 57, 58,
  9.                60, 67, 68, 69,
  10.                70, 71, 75, 77,
  11.                79, 80
  12.            }

Tienes la colección principal, dividida en una colección que contiene colecciones de 4 elementos (total: 8 sub-colecciones), con nombre 'splittedCols'.

Código
  1.        ' La colección principal, dividida en una colección que contiene colecciones de 4 elementos (total: 8 colecciones).
  2.        Dim parts As Integer = 4
  3.        Dim splittedCols As IEnumerable(Of IEnumerable(Of Integer)) =
  4.            From index As Integer In Enumerable.Range(0, CInt(Math.Ceiling(mainCol.Count() / parts)))
  5.            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)
Código
  1.        ' Las 8 colecciones de 4 elementos cada una, unidas en una sola colección:
  2.        Dim joinedCol As IEnumerable(Of Integer) = {}
  3.        splittedCols.ToList.ForEach(Sub(col As IEnumerable(Of Integer))
  4.                                        joinedCol = joinedCol.Concat(col)
  5.                                    End Sub)

Código
  1. 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

Código
  1. Dim mainCol As IEnumerable(Of Integer) =
  2.            {
  3.                1, 2, 3, 4,
  4.                5, 6, 10, 15,
  5.                20, 22, 24, 25,
  6.                30, 35, 45, 47,
  7.                50, 54, 57, 58,
  8.                60, 67, 68, 69,
  9.                70, 71, 75, 77,
  10.                79, 80
  11.            }




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


















Título: Re: Otra de las mias jejje traspasar datos condicionados de una variable a otras
Publicado por: Eleкtro en 8 Marzo 2015, 13:52 pm
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

¿Cómo que no?:

Citar
Código
  1. Dim parts As Integer = 4
  2. Dim splittedCols As IEnumerable(Of IEnumerable(Of Integer)) =
  3.     From index As Integer In Enumerable.Range(0, CInt(Math.Ceiling(mainCol.Count() / parts)))
  4.     Select mainCol.Skip(index * parts).Take(parts)


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

Código:
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):

Código
  1.    ''' <remarks>
  2.    ''' *****************************************************************
  3.    ''' Snippet Title: Split Collection Into Parts
  4.    ''' Code's Author: Elektro
  5.    ''' Date Modified: 08-March-2015
  6.    ''' Usage Example:
  7.    ''' Dim mainCol As IEnumerable(Of Integer) = {1, 2, 3, 4, 5, 6, 7, 8, 9}
  8.    ''' Dim splittedCols As IEnumerable(Of IEnumerable(Of Integer)) = SplitColIntoParts(mainCol, amount:=4)
  9.    ''' splittedCols.ToList.ForEach(Sub(col As IEnumerable(Of Integer))
  10.    '''                                 Debug.WriteLine(String.Join(", ", col))
  11.    '''                             End Sub)
  12.    ''' *****************************************************************
  13.    ''' </remarks>
  14.    ''' <summary>
  15.    ''' Splits an <see cref="IEnumerable(Of T)"/> into the specified amount of parts.
  16.    ''' </summary>
  17.    ''' <typeparam name="T"></typeparam>
  18.    ''' <param name="collection">The collection to split.</param>
  19.    ''' <param name="amount">The parts amount.</param>
  20.    ''' <returns>IEnumerable(Of IEnumerable(Of T)).</returns>
  21.    Public Shared Function SplitColIntoParts(Of T)(ByVal collection As IEnumerable(Of T),
  22.                                                   ByVal amount As Integer) As IEnumerable(Of IEnumerable(Of T))
  23.  
  24.        Return From index As Integer
  25.               In Enumerable.Range(0, CInt(Math.Ceiling(collection.Count() / amount)))
  26.               Select collection.Skip(index * amount).Take(amount)
  27.  
  28.    End Function


Título: Re: Otra de las mias jejje traspasar datos condicionados de una variable a otras
Publicado por: luis456 en 8 Marzo 2015, 14:45 pm
Jo cada ves me vuelvo mas loco , te paso lo que estoy tratando de hacer de una forma que me sea mas facil

Código
  1.   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
  2.  
  3.  
  4. quiero poner esos numeros en estas variables ??
  5. a= 1 2 3 4
  6. b= 3 5 10 15
  7. c= 20 25 30 35
  8.  
  9.  
  10. Dim Result As IEnumerable(Of Integer) =
  11.            (a.Concat(b.Concat(c))).          <---------------para concatenar a +b c+a etc cada ves que quiera
  12.            Distinct.
  13.  
  14.  
  15.  
  16. ListBox4.Items.AddRange(Resul.Cast(Of Object).ToArray)

Gracias
Luis


Título: Re: Otra de las mias jejje traspasar datos condicionados de una variable a otras
Publicado por: 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"?.


Título: Re: Otra de las mias jejje traspasar datos condicionados de una variable a otras
Publicado por: luis456 en 8 Marzo 2015, 16:22 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