c # indexador para la lista de la lista

hola a todos quiero hacer un indexador a la lista de la lista para obtener elementos como este myopj [i, j]. mi estructura de datos es así:

list<list<doubl>>

Intento un código como este pero no funciona

public double this[int r, int c] 
   {
     set 
       {
         if (this.list1.Count == 0 )

                {

                    this.list1[r].Add(value);

                }

         else

                  this.list1[r][c]=value;
       } 
   }

cuando lo miro, el programa no ingresa el 'si' y finaliza el reloj.

por favor, ¿alguien puede ayudar?

y gracias por todos.

preguntado el 16 de mayo de 11 a las 17:05

La conjetura list1.Capacity no fue igual a 0. -

Que clase agregaste this método para? -

Intento list1.count pero no funciona, el programa no comprueba si la declaración es abrot -

En tu código nos muestras un conjunto, ¿pero hablas de get? -

hay un get pero no está aquí lo siento -

4 Respuestas

Debería comprobar el recuento, no la capacidad. Capacidad es el número de elementos que puede tener la lista, el Contar es el número real de elementos de su lista. Entonces, dada una lista que no es nula, la capacidad NUNCA debería ser cero, pero el recuento podría serlo.

contestado el 16 de mayo de 11 a las 21:05

Parece bastante extraño que tu value es un list<T> o T.

Sin más información, le sugiero que implemente esto usando una única y larga lista de T. Luego traducirá myList<T>[i,j] al subyacente list<T>[ i * numRows + j].

Espolvoree las validaciones según sea necesario.

Si realmente, realmente debe usar listas de listas, averigüe si desea terminar con una matriz rectangular (es decir, la lista en la fila i tiene el mismo número de elementos que la lista en la fila j), o una matriz escalonada (donde cada lista tiene un número independiente de elementos). Si se encuentra en el primer caso, considere la posibilidad de crear y completar las listas de filas automáticamente, con la cantidad adecuada de elementos (use default<T> para inicializarlos)

Actualizar:

Entonces, si lo que realmente necesita es una matriz rectangular, utilice una lista. Tendrá elementos numRows * numColumns. Imagina que, en lugar de poner una fila debajo de la otra para hacer una matriz, colocas los elementos de una fila uno tras otro.

Entonces, si tiene: 11 12 13 21 22 23 31 32 33

en forma de lista serán 11 12 13 21 22 23 31 32 33

Hay una conversión simple entre las coordenadas X e Y (o i y j) en el primer formulario y el índice en la lista en el segundo formulario.

contestado el 17 de mayo de 11 a las 00:05

gracias, quiero hacer una clase de matriz, tal vez sea rectangular o escalonada. No conozco nada más poderoso que la lista de listas, pero quiero un indexador para facilitar el proceso. Muchas gracias. eyadof

¿Por qué está comprobando la capacidad? Probablemente nunca será cero. ¿Querías comprobar el Count?

contestado el 16 de mayo de 11 a las 21:05

Quiere la propiedad length, y no Capactiy.

Uso:

 if (this.list1.Count < r )

Su algoritmo realmente no tiene mucho sentido, es posible que desee describir lo que está tratando de lograr. Parece que está tratando de hacerlo crecer si no es lo suficientemente grande, pero la lógica en las dos rutas separadas (si es que no) no se alinea.

contestado el 16 de mayo de 11 a las 21:05

ok, lo siento por (si más) pero en mi código está bien, el problema es mi programa, no verifique la declaración si va directamente al final del programa y la función de eliminación ... - eyadof

La declaración if está en un conjunto, publique el código de lo que está tratando de configurar o muéstrenos el código de programa mágico al que se refiere. - Nix

puse este código en set accessor if (this.matrixData.Count == 0) {List col = nueva lista (); col.Add (valor); this.matrixData.Add (col); this.Height ++; this.Width ++; } else if (c == this.Width + 1) {List col = nueva lista (); col.Add (valor); this.matrixData.Add (col); this.Width ++; } else if (r == this.Height + 1) {this.matrixData [c-1] .Add (value); this.Height ++; } else if (c == this.Width && this.matrixData [c-1] .Count <r) {this.matrixData [c-1] .Add (valor); } de lo contrario this.matrixData [r-1] [c-1] = valor; - eyadof

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.