Eliminar y reemplazar registros en Array

Iniciado por luis456, 15 Enero 2014, 10:56 AM

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

luis456

Quiero hacer un bucle que mire los objetos del array uno a uno y si se pase del rango lo elimine pero que sobreescriva con algun numero dentro del rango 00 /99
en ese espacio y asi consecutivamente ( siempre numerico)

este codigo lo encontre trasteando aca mismo :)pero no logro hacer que funcione que hago mal ?


Código (VB.NET) [Seleccionar]

Dim Result3 as integer

Dim i, j As Integer 'Contadores

       For i = 1 To "cantidad de objetos en el array"
           If Result3(i) = 99 Then
               For j = 1 To "objetos array - i"
                   If not (i+1) > 12 (i) = Result3(i+1) else: Result3(i) = ""
                   End If
               Next j
           End If

       Next i


ListBox3.Items.Add(CStr(Result3(X)))



Saludos
Luis

[MOD]Para la próxima inserta correctamente las etiquetas de código.
Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#1
¿ Que te dije de usar LINQ ?

¿algo como esto te sirve?:
Código (vbnet) [Seleccionar]
Public Class Form1

   ReadOnly MAX As Integer = 100

   Public Sub Test() Handles MyBase.Shown

       Dim Rand As New Random

       Dim result1 As Integer() = {1, 100, 2, 3, 4}
       Dim result2 As Integer() = {5, 500, 6, 6, 4}
       Dim result3 As Integer() = {7, 8, 9, 10, 99}

       ' Concateno, y...
       ' Elimino duplicados, y...
       ' Selecciono los números inferiores a MAX, y...
       ' Convierto los números mayores a MAX a números aleatorios entre 0 y MAX.
       Dim Result As IEnumerable(Of Integer) =
           (result1.Concat(result2).Concat(result3)).
           Distinct.
           Select(Function(Value As Integer)
                      Return If(Value < MAX, Value, Rand.Next(0, MAX))
                  End Function)

       ' Result = 1, RANDOM, 2, 3, 4, 5, RANDOM, 6, 7, 8, 9, 10, 99
       ListBox1.Items.AddRange(Result.Cast(Of Object).ToArray)

   End Sub

End Class


Saludos!








luis456

#2
Cita de: Eleкtro en 15 Enero 2014, 18:19 PM
¿ Que te dije de usar LINQ ?

¿algo como esto te sirve?:
Código (vbnet) [Seleccionar]
Public Class Form1

   ReadOnly MAX As Integer = 100

   Public Sub Test() Handles MyBase.Shown

       Dim Rand As New Random

       Dim result1 As Integer() = {1, 100, 2, 3, 4}
       Dim result2 As Integer() = {5, 500, 6, 6, 4}
       Dim result3 As Integer() = {7, 8, 9, 10, 99}

       ' Concateno, y...
       ' Elimino duplicados, y...
       ' Selecciono los números inferiores a MAX, y...
       ' Convierto los números mayores a MAX a números aleatorios entre 0 y MAX.
       Dim Result As IEnumerable(Of Integer) =
           (result1.Concat(result2).Concat(result3)).
           Distinct.
           Select(Function(Value As Integer)
                      Return If(Value < MAX, Value, Rand.Next(0, MAX))
                  End Function)

       ' Result = 1, RANDOM, 2, 3, 4, 5, RANDOM, 6, 7, 8, 9, 10, 99
       ListBox1.Items.AddRange(Result.Cast(Of Object).ToArray)

   End Sub

End Class


Saludos!


Gracias como siempre elektro :)


lo estoy probando y me da este error en


ListBox1.Items.AddRange(Result.Cast(Of Object).ToArray)

No se puede modificar la colección Items cuando está establecida la propiedad DataSource. ?????????????????

SOLUCIONADO CUESTION DE HERENCIA :)

Luis


SOLUCIONADO CUESTION DE HERENCIA :)
Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#3
Cita de: luis456 en 15 Enero 2014, 20:16 PM

No se puede modificar la colección Items cuando está establecida la propiedad DataSource. ?????????????????


Si estás usando un DataSource debes hacer los cambios en el objeto source, no los puedes hacer diréctamente en el ListBox ...a menos que vuelvas la propiedad a valor nulo.

Compila esto en un nuevo proyecto y fíjate lo que sucede en cada pausa:
Código (vbnet) [Seleccionar]
Public Class Form1

    Dim Source As Integer() = {1, 2, 3}

    Private Sub Form1_Load() Handles MyBase.Shown

        Dim LB As New ListBox
        Me.Controls.Add(LB)

        LB.DataSource = Source
        Threading.Thread.Sleep(2000) : Application.DoEvents()

        Source = {1, 2, 3, 4, 5, 6}
        LB.DataSource = Source
        Threading.Thread.Sleep(2000) : Application.DoEvents()

        LB.DataSource = Nothing
        LB.Items.Add(99)
        Threading.Thread.Sleep(2000) : Application.DoEvents()

    End Sub

End Class


saludos