Comprobación del tamaño de una lista de matrices

Tengo una lista de matrices de cadenas:

List<string[]> parsedRaw = new List<string[]>();

Esta lista contiene líneas leídas desde un CSV, donde parsedRaw[3][5] sería el quinto elemento leído de la tercera línea del CSV.

Sé que puedo encontrar el número de filas en la lista con:

parsedRaw.Count

Pero, dada una fila, ¿cómo puedo encontrar el número de elementos en esa fila? Estoy tratando de implementar una prueba antes de ingresar un ciclo para leer de la lista, para evitar un error de "El índice estaba fuera de los límites de la matriz", donde el ciclo es:

for (k = 0; k < nBytes; k++)
{
    TheseBytes[k] = (byte)parsedRaw[i][StartInt + k];
}

Estoy encontrando el error en una fila en el CSV que tiene menos elementos que los demás. Antes de ingresar a este ciclo, debo verificar si parsedRaw[i] tiene al menos elementos "StartInt + nBytes".

Gracias por cualquier sugerencia!

preguntado el 03 de mayo de 12 a las 16:05

¿Has probado a usar una expresión lambda? -

En realidad, parsedRaw[3][5] sería el sexto elemento de la cuarta línea. -

3 Respuestas

Una fila es solo una matriz de cadenas string[], por lo que puede encontrar su tamaño usando el Length propiedad de la matriz.

foreach (string[] row in parsedRaw) {
    for (int i = 0 ; i != row.Length ; i++) {
        // do something with row[i]
    }
}

contestado el 03 de mayo de 12 a las 16:05

Pude obtener una solución utilizando la propiedad Longitud agregando la siguiente instrucción if como requisito previo para ingresar al ciclo for: "if (parsedRaw[i].Length >= (StartInt + nBytes))" Gracias por señalar la Longitud propiedad. - Patrón

El número de elementos en una fila dada está determinado por

parsedRaw[theRowIndex].Length

Para arreglar su ciclo for, necesita restringir el StartInt + k valor sea menor que el mínimo de nBytes y la longitud de la fila

for (k = 0; (k < nBytes) && (k + StartInt < parsedRaw[i].Length); k++)
{
    TheseBytes[k] = (byte)parsedRaw[i][StartInt + k];
}

contestado el 03 de mayo de 12 a las 17:05

Esta fue una sugerencia útil, pero parece que eliminó nBytes. Este bucle se leería hasta el final de la fila, pero solo necesito extraer nBytes de elementos cada vez que encuentro este bucle. - Patrón

@Patrigon mi error, lo volví a agregar - jaredpar

En realidad, ahora estoy pensando que esta es una solución más atractiva que anidar el bucle for dentro de un bucle if. Gracias de nuevo. - Patrón

Trata

List<string[]> parsedRaw = new List<string[]>();
parsedRaw.Add(new string[] {"test1", "test2"});
parsedRaw.Add(new string[] { "test1", "test2", "test3" });
int totalSize = 0;
for (int i = 0; i < parsedRaw.Count(); i++)
{
    int rowSize = 0;
    for (int k = 0; k < parsedRaw[i].Count(); k++)
    {
        rowSize += parsedRaw[i][k].Length;    
    }                
    totalSize += rowSize;
}

contestado el 03 de mayo de 12 a las 16:05

Sí, parece que parsedRaw[i].Count() devuelve el mismo valor que parsedRaw[i].Length. Esto también podría haber funcionado para mí. - Patrón

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