Pregunta

He encontrado esta pregunta en una antigua pregunta en su sitio web por lo que pensé que puedo hacerlo, pero creo que estaba equivocado: -)

The Old Post se aquí

Soy nuevo en la matriz escalonada que lo hizo el siguiente código

StreamReader rows = new StreamReader("c:\\practice.txt");
            string line;
            int i;
            i=1;
            while ((line = rows.ReadLine()) != null)
            {
                String[][]rows = new String [i][]; ;
                rows = rows.ReadLine();
                String[][] rows = new string[S.Length][];
                i++;
            }
            for (int i; i < S.Length; i++)
            {

                row[i] = S[I].Split(',');

            }

            int totalCounter = 0, totalSum = 0;
            // etc
            foreach(string[] row in rows)
            {    
                int m1 = int.Parse(row[3]);
                totalCounter++;
                totalSum += m1;
                switch(row[2])
                {        
                    case "male":
                    maleCount++;            
                    maleSum += m1;            
                        break;        
                    case "female":            
                        femaleCount++;            
                        femaleSum += m1;            
                        break;    
                }
            }

Sé que lo hice grandes errores, pero en este he intentado Puede alguien ayudarme a hacer que un código Workin

¿Fue útil?

Solución

Usted parece ser de doble lectura de las líneas, o tal vez usted ha mezclado filas y celdas - este bit en particular miradas realmente extraño:

        while ((line = rows.ReadLine()) != null)
        {
            String[][]rows = new String [i][]; ;
            rows = rows.ReadLine();
            String[][] rows = new string[S.Length][];
            i++;
        }

es decir. re-declaran filas, dos llamadas a ReadLine por lazo, etc. sospechan que quiere decir string.Split? De cualquier manera, ya sea para uso File.ReadAllLines, o mirar algunas de las opciones presentadas ayer. Si usted está desesperado por utilizar matrices, el núcleo podría ser algo como:

using System;
using System.IO;
static class Program
{
    static void Main()
    {
        string[] lines = File.ReadAllLines("foo.txt");
        string[][] grid = new string[lines.Length][];
        for (int i = 0; i < lines.Length; i++)
        {
            grid[i] = lines[i].Split(',');
        }

        int totalCount = 0, maleCount = 0, femaleCount = 0,
            m1Total = 0, m2Total = 0, m3Total = 0,
            m1MaleTotal = 0, m1FemaleTotal = 0;
        foreach (string[] line in grid)
        {
            totalCount++;
            int m1 = int.Parse(line[3]),
                m2 = int.Parse(line[4]),
                m3 = int.Parse(line[5]);
            m1Total += m1;
            m2Total += m2;
            m3Total += m3;
            switch (line[1].Trim())
            {
                case "male":
                    maleCount++;
                    m1MaleTotal += m1;
                    break;
                case "female":
                    femaleCount++;
                    m1FemaleTotal += m1;
                    break;
            }
        }
        Console.WriteLine("Rows: " + totalCount);
        Console.WriteLine("Total m1: " + m1Total);
        Console.WriteLine("Average m1: " + ((double)m1Total)/totalCount);
        Console.WriteLine("Male Average m1: " + ((double)m1MaleTotal) / maleCount);
        Console.WriteLine("Female Average m1: " + ((double)m1FemaleTotal) / femaleCount);
    }
}

Una vez más - no puedo expresar con palabras lo mucho que debería estar haciendo esto con LINQ en lugar de bucle manual de ...

Otros consejos

En primer lugar, asegúrese de embalar recursos no administrados, tales como corrientes en el uso de declaraciones.

En lo personal me gusta mi LineReader clase que hace que sea fácil de leer líneas de texto desde un archivo (o cualquier otra cosa, en realidad).

A continuación, me gustaría evitar el uso de matrices a menos que realmente tenga que hacerlo. List<T> es generalmente mucho más agradable para trabajar. Ahora bien, si string.split hace lo que quiere, se puede tener fácilmente un List<String[]>. Por otra parte, es probable que pueda hacer mucho del trabajo usando LINQ:

var query = from line in new LineReader("c:\\practice.txt")
            let parts = line.Split(',')
            select new { Gender=parts[2], Amount=int.Parse(parts[3]) };

Tomando múltiples agregados a partir de un único flujo de datos es complicado en "normal" LINQ (que es la razón por Marc Gravell y yo desarrollamos empuje LINQ ). Sin embargo, se puede utilizar una instrucción foreach normales:

int totalCounter = 0, totalSum = 0;
int maleCount = 0, maleSum = 0, femaleCount = 0, femaleSum = 0;
foreach (var row in query)
{
    totalCounter++;
    totalSum += row.Amount;
    switch (row.Gender)
    {
        case "male":
            maleCount++;
            maleSum += Amount;
            break;
        case "female":
            femaleCount++;
            femaleSum += Amount;
            break;
    }
}

Si desea agrupar las filas de género que podría ser capaz de hacer esto aún más sencillo, sobre todo si se sabe que el género es siempre "macho" o "hembra".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top