De regreso con mis temas jejje ,saltar un espacio en arreglo

Iniciado por luis456, 21 Mayo 2015, 09:34 AM

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

luis456

Hola a todos

en un arreglo de numeros de x cantidad de numeros, siempre el famoso 01 al 99 :) yo formo grupos de numeros de 10 numeros

concatenando splist o variables de dos numeros cada uno de ese arreglo de esta manera:

Código (vbnet) [Seleccionar]
  Dim Bz1 As IEnumerable(Of Integer) =
(
From Value As Integer In split(1).Concat(split(2).Concat(split(3)).Concat(split(4)).Concat(split(5)))
Where (Value <= MAX AndAlso Value > 0)).Distinct

       
        Dim Sl1 As IEnumerable(Of Integer) = Bz1
        Dim SM1 As List(Of Integer) = Bz1.toList
        SM1.Sort()
       
       Me.ListBox2.Items.AddRange((From value As Integer In SM1 Where value <> 0).Cast(Of Object).ToArray)



Bien esto funciona bien el problema que quiero resolver es que tiene correlatividad de numeros.


arreglo principal ( 01 02 03 04 05 06 07 08 09 10 ....................99)

este codigo muestra este resultado

01 02 03 04 05 06 07 08 09 10

Porque al ordenarse el arreglo los splits o variables enpiezan desde el principio del arreglo

split(1) = 01 02
split(2) = 03 04
split(3) = 05 06
split(4) = 07 08
split(5) = 09 10



estos split los saco de esta funcion que toma los valores del arreglo principal


Código (vbnet) [Seleccionar]
Dim split As IEnumerable(Of IEnumerable(Of Integer)) =
        SplitIntoParts(collection:=alia1, amount:=2, fillEmpty:=True)



en definitiva lo que nesecito es hacer saltos de numeros intermedios de los numeros contenidos en los split

ejemplo
ahora es de esta forma

split(1) = 01 02
split(2) = 03 04
split(3) = 05 06
split(4) = 07 08
split(5) = 09 10
******************
y lo nesecito de esta forma

split(1) = 01 03
split(2) = 02 04
split(3) = 05 07
split(4) = 06 08
split(5) = 08 10


Bueno antes de preguntar he usado take,skip sin resultados :) con la clausula Where no se plantear el problema

claro esta que si volvemos a unir los split como estan ahora y despues, se formaria la misma combinacion pero lo puse a si para el ejemplo ya que las concatenaciones cambian de forma que haga otras numeraciones :)


Luis



Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

Puedes utilizar un For con un salto de elementos, asignando un valor al keyword opcional Step.

Ejemplos:
Código (vbnet) [Seleccionar]
For value As Integer = 0 To 10 Step 2
   Debug.Write(value)
Next value


Código (vbnet) [Seleccionar]
Dim values As Integer() = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

For index As Integer = 0 To (values.Count - 1) Step 2
   Debug.Write(values(index))
Next index


Ejemplos oficiales:
For...Next Statement (Visual Basic) - MSDN

Ahora, eso deberías adaptarlo para aplicarlo al código que tengas.

Saludos!








luis456

A si estaria Bien :)

lo estoy probando pero tengo que quitar unas claves ya que me da conflito o este error pero ya creo saber que tengo que eliminar

error

No se puede convertir un objeto de tipo '<ConcatIterator>d__71`1[System.String]' al tipo 'System.Collections.Generic.IEnumerable`1[System.Int32]'.

esto es lo que he echo :)


Código (vbnet) [Seleccionar]
Dim suma = From num In alia1 _
                         Select num

        For num As Integer = 0 To 99 Step 2

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

        Next num



Luis




Que tu sabiduria no sea motivo de Humillacion para los demas

luis456

Cita de: luis456 en 22 Mayo 2015, 18:29 PM
A si estaria Bien :)

lo estoy probando pero tengo que quitar unas claves ya que me da conflito o este error pero ya creo saber que tengo que eliminar

error

No se puede convertir un objeto de tipo '<ConcatIterator>d__71`1[System.String]' al tipo 'System.Collections.Generic.IEnumerable`1[System.Int32]'.

esto es lo que he echo :)


Código (vbnet) [Seleccionar]
Dim suma = From num In alia1 _
                         Select num

        For num As Integer = 0 To 99 Step 2

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

        Next num



Luis




elimine el error pero no funciona como quiero, me corta el arreglo :( y me deja las combinaciones sin numeros para completar los diez numeros ?????


Luis






Que tu sabiduria no sea motivo de Humillacion para los demas

luis456

otro intento pero nunca he liado con esto . y esta funcion me parece que es la que me serviria


el operador '<<' no está definido para los tipos 'System.Collections.Generic.List(Of Integer)' y 'Integer'.


Código (vbnet) [Seleccionar]
  Dim var As IEnumerable(Of Integer) = {15, 45, 48, 47, 33, 43, 60, 65, 88}
        Dim shift As Integer = 2

        Dim Sl As IEnumerable(Of Integer) = var
        Dim SM As List(Of Integer) = var.ToList

        SM <<= shift

        Me.ListBox2.Items.AddRange((From value As Integer In SM Where value <> 0).Cast(Of Object).ToArray) 
Que tu sabiduria no sea motivo de Humillacion para los demas

luis456

Cita de: SergioE en 25 Mayo 2015, 17:52 PM
Gracias, estoy aprendiendo mucho en este foro.
Soy novato en esto del .NET


Si hay muy buenos profresores  en este foro ,algunos medio cascarabias pero bien :) jejej en esto de net he aprendido mucho gracias a ellos

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

Eleкtro

#6
Cita de: luis456 en 25 Mayo 2015, 19:55 PMalgunos medio cascarabias pero bien :)

Te estoy leyendo. ¡CASTIGADO! :¬¬

No, ahora ne serio, muestra el código completo junto a la función SplitIntoParts que parte una coleccion en varias colecciones, que me imagino que será la misma función que escribí una vez para ti, y entonces, solo entonces, explica lo que ocurre y lo que quieres conseguir, aunque creo que el problema está claro, quieres que las colecciones partidas tengan un "salto" de elementos, pero si no muestras el código de la función que utilizas para partir la colección en varias colecciones... .   . .

Saludos








luis456

Bueno mientras no me jales de las orejas,de las patillas ,no me des con la regla en los dedos ni me pongas de rodillas con una tapas de refrescos jejej como era antes,  :silbar:

bueno aca esta la version cortita :)

Código (vbnet) [Seleccionar]
Public Class Form1
    ReadOnly MAX As Integer = 99
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


        Dim arregloSumasa() As Integer = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21}



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

        ' *****************************************************************************************************
        Dim Bz990 As IEnumerable(Of Integer) =
(
From Value As Integer In split(0).Concat(split(1)).Concat(split(2)).Concat(split(3)).Concat(split(4))
Where (Value <= MAX AndAlso Value > 0)).Distinct

       
        Dim Sl990 As IEnumerable(Of Integer) = Bz990
        Dim SM990 As List(Of Integer) = Bz990.Take(10).ToList
        SM990.Sort()

        Me.ListBox1.Items.AddRange((From value As Integer In SM990 Where value <> 0).Cast(Of Object).ToArray)
        ' *******************************************************************************************************
        'este codigo ahora
        ' muestra -------> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

        ' yo quiero mostrar --> 1, 3, 5, 7, 9, 11,13,15,17, 19 <--- ojo no son numeros pares ni impares, es por posiciones
        ' yo quiero mostrar --> 2, 4, 6, 8, 10, 12,14,16,18.20 <---estan ordenados para el ejemplo




    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
Que tu sabiduria no sea motivo de Humillacion para los demas

luis456

Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#9
Cita de: luis456 en 21 Mayo 2015, 09:34 AMejemplo
ahora es de esta forma

Código (vbnet) [Seleccionar]
split(1) = 01 02
split(2) = 03 04
split(3) = 05 06
split(4) = 07 08
split(5) = 09 10

******************
y lo nesecito de esta forma
Código (vbnet,4,5) [Seleccionar]

split(1) = 01 03
split(2) = 02 04
split(3) = 05 07
split(4) = 06 08
split(5) = 08 10

Ordenamiento por posiciones, ok, ¿y que haces con el 9? ...¿y la repetición del 8?.

Se podría desarrollar la idea si no fuese por que cómo siempre no se entiende la mecánica de lo que pretendes hacer... explica por que no está el nueve, por que lo descartas, qué lógica hay detrás de ese sistema de descarte.

Saludos!