C #: ¿Cómo transformar String “[['x', 'x'], ['x', 'x']]” en una matriz sin Split () ing?

La cadena parece una matriz 2-D:

[['a;b;c','d','e'],['a;b;c;d','h','k'], ... ]

Pero, ¿cómo lo evalúo y lo transformo en una matriz 2D en C # sin usar Split ()?

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

Implementando Split ¿tú mismo? ¿Por qué no usarías Split? -

¿Python es una opción? ;) pythonnet.sourceforge.net/readme.html -

¿Es esta tarea? -

@Oded Tengo el mismo pensamiento cada vez que veo este tipo de pregunta "cómo puedo hacer x sin usar [forma obvia de hacer x]" ... -

@Oded ¡Por supuesto! ¡¡Es tarea !! ¡Por eso es una pregunta extraña! -

2 Respuestas

Cuando tenga un problema de programación y esté atascado, divídalo en un problema de programación más simple. Esta respuesta le mostrará cómo analizar crudamente usando solo primitivas de cadena C #, solo una "submatriz" de su cadena en una lista. Eso sería un buen progreso y luego puede comenzar a extender y mejorar el código.

var s = "['a;b;c','d','e']";
List<string> list = new List<string>();
int i = 0;
while (i < s.Length)
{
    char c = s[i++];
    if (c == '[')
    {
        while (i < s.Length)
        {
            c = s[i++];
            if (c == '\'')
            {
                int start = i;
                while (i < s.Length && s[i] != '\'')
                    i++;
                list.Add(s.Substring(start, i - start));
                i++;
            }
            if (i < s.Length && s[i] == ',')
                i++;
            if (i < s.Length && s[i] == ']')
            {
                i++;
                break;
            }
        }
    }
}
foreach (var item in list)
    Console.WriteLine(item);

Esto produce como salida:

a;b;c
d
e

No es bidimensional, pero no voy a escribir todo el programa para ti. También lo pone en un List en lugar de una matriz, pero tienes que hacerlo de todos modos porque no sabes qué tan grande es. Esto es lo que quiero decir al dividir el problema en partes más pequeñas que puedes resolver.

También puede mejorar el código comprobando considerablemente si faltan comas, etc. Pero esto debería ayudarle a empezar.

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

Me parece una cadena JSON. Si es así, utilice el DataContractJsonSerializer para deserializar la cadena en un string[][]

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

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