Hola otro de mis rollos con variables

Iniciado por luis456, 9 Julio 2015, 15:30 PM

0 Miembros y 1 Visitante están viendo este tema.

luis456

Hola a todos

como ya mas o menos me defiendo jejej ya casi no pregunto :) pero no se como hacer que este codigo
em ves de empezar con split(0) empieze con el split(1) me explico

tengo un arreglo de x numeros (1, 2, 3, 4, 5) y si quiero hacer una union o concatenacion de ese arreglo por ejemplo ( 1 2 3 )  tengo que tomar split(0),split(1),split(2)

cuando lo que yo quiero es split(1),split(2),split(3) y no tomar en cuenta el split(0),he provado con Skip(1) pero no me vale ya que me salta el numero inicial


un poco mas claro :)

arreglo
1, 2, 3, 4, 5

asi es ahora

1 = split(0)
2 = split(1)
3 = split(2)

nesecito de esta forma

1 = split(1)
2 = split(2)
3 = split(3)


Código (vbnet) [Seleccionar]
Dim arregloSumasa() As Integer = {1, 2, 3, 4, 5}


  Dim split As IEnumerable(Of IEnumerable(Of Integer)) =
   SplitIntoParts(collection:=arregloSumasa, amount:=1, fillEmpty:=True)








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




Saludos

Luis

Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#1
Fíjate en el nuevo parámetro que le añadí:

Código (vbnet,4,5,8,17) [Seleccionar]
 Public Shared Function SplitIntoParts(Of T)(ByVal collection As IEnumerable(Of T),
                                             ByVal amount As Integer,
                                             ByVal fillEmpty As Boolean,
                                             Optional ByVal add As Integer = 0,
                                             Optional ByVal skip As Integer = 0
                                            ) As IEnumerable(Of IEnumerable(Of T))

     Dim emptyAdded As IEnumerable(Of IEnumerable(Of T)) = Enumerable.Repeat({DirectCast(Nothing, T)}, add)

     Return emptyAdded.Concat(
            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))))
            ).Skip(skip)

 End Function


De esa manera, si le asignas un valor de add:=1 al llamar a la función, le añadiras esa cantidad especificada de IEnumerable(Of T) (vacías) al pricipio de la colección, y, aparte, si le asignas un valor de skip:=X, la función devolverá el IEnumerable(Of IEnumerable(Of T)) ignorando la cantidad especificada de elementos de tipo IEnumerable(Of T) al principio de la colección.

Saludos








luis456

Cita de: Eleкtro en  9 Julio 2015, 17:02 PM
Fíjate en el nuevo parámetro que le añadí:

Código (vbnet,4,5,8,17) [Seleccionar]
 Public Shared Function SplitIntoParts(Of T)(ByVal collection As IEnumerable(Of T),
                                             ByVal amount As Integer,
                                             ByVal fillEmpty As Boolean,
                                             Optional ByVal add As Integer = 0,
                                             Optional ByVal skip As Integer = 0
                                            ) As IEnumerable(Of IEnumerable(Of T))

     Dim emptyAdded As IEnumerable(Of IEnumerable(Of T)) = Enumerable.Repeat({DirectCast(Nothing, T)}, add)

     Return emptyAdded.Concat(
            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))))
            ).Skip(skip)

 End Function


De esa manera, si le asignas un valor de add:=1 al llamar a la función, le añadiras esa cantidad especificada de IEnumerable(Of T) (vacías) al pricipio de la colección, y, aparte, si le asignas un valor de skip:=X, la función devolverá el IEnumerable(Of IEnumerable(Of T)) ignorando la cantidad especificada de elementos de tipo IEnumerable(Of T) al principio de la colección.

Saludos


Gracias Elektro

Funciona de maravilla jejejej lastima que ahora no tenga tantas preguntas JAJAJJA siempre que iba a  mirar tus respuestas estaba acojonado por tus reaccion (regaños)  jejeje de verdad que funcionaron, ya que solo por no leerlos jejej me buscaba la vida y
para los que empiezan con este lenguaje tienen buen profe jejej

De nuevo gracias

Luis










Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#3
Cita de: luis456 en  9 Julio 2015, 17:43 PMsiempre que iba a  mirar tus respuestas estaba acojonado por tus reaccion (regaños)  jejeje de verdad que funcionaron, ya que solo por no leerlos jejej me buscaba la vida y para los que empiezan con este lenguaje tienen buen profe jejej

No se yo... si en la piel de profesor consigo que mis ""alumnos"" huyan entonces no seré tan buen profe xD.

¿Qué van a pensar de mi los demás?, reconozcámoslo, no te he "regañado" tanto... jaja, solo fui lo necesariamente arisco o estricto para que supieras desenvolverte por ti mismo para resolver cosas básicas.

Ahora escribes los posts formulando preguntas publicando un ejemplo del resultado que obtienes y el que deseas obtener, y no ha sido necesario pedirte el código...
...aunque lo hagas solo para que no te "regañe" xD no lo se, pero es un cambio positivo en la calidad de la información de tus post.

Saludos!








luis456

 :silbar: :silbar: :silbar: :silbar: :silbar: :silbar:

Claro que tu ayuda me sirvio de mucho y espero que a muchos mas  ;-)  ;-) siempre aunque que no postee, estoy dando vueltas por estos lares jejejje



saludos
Luis
Que tu sabiduria no sea motivo de Humillacion para los demas