Frage

fand ich diese Frage in einer alten Frage in Ihrer Website, so dass ich dachte, dass ich es tun kann, aber ich denke, ich habe mich geirrt: -)

die alte Post wurde hier

Ich bin neu in der gezackten Array Sache so hat der folgenden Code

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;    
                }
            }

Ich weiß, dass ich große Fehler haben im Osten, aber ich versuchte, kann jemand mir helfen es ein workin Code zu machen

War es hilfreich?

Lösung

Sie scheinen doppelt Lesen der Zeilen zu sein, oder vielleicht haben Sie vertauscht Zeilen und Zellen - dieses Bit insbesondere Aussehen wirklich ungerade:

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

d. Wieder erklärt Reihen, zwei Anrufe pro Schleife ReadLine usw. Ich vermute, Sie meinen string.Split? So oder so, entweder Verwendung File.ReadAllLines, oder schauen Sie sich die gestern um einige Optionen vorgestellt. Wenn Sie verzweifelt sind Arrays zu verwenden, suchen Sie den Kern könnte so etwas wie:

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);
    }
}

Auch hier - ich kann nicht genug betonen, wie viel Sie sollten statt manuellen Looping dies mit LINQ tun ...

Andere Tipps

Stellen Sie zunächst sicher, dass Sie nicht verwalteten Ressourcen wie Ströme in using-Anweisungen wickeln.

Persönlich mag ich meine LineReader Klasse, die es einfach macht, Textzeilen zu lesen aus einer Datei (oder irgendetwas anderes, tatsächlich).

Als nächstes würde ich Verwendung von Arrays vermeiden, wenn Sie wirklich zu haben. List<T> ist in der Regel sehr viel angenehmer, mit zu arbeiten. Nun, wenn String.split tut, was Sie wollen, können Sie einfach einen List<String[]> haben. Alternativ können Sie wahrscheinlich eine Menge Arbeit mit LINQ tun:

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

mehrere Aggregate aus einem einzigen Datenstrom zu nehmen ist heikel in „normalen“ LINQ (weshalb Marc GRA und ich entwickeln Drücken LINQ ). Sie können jedoch eine normale foreach-Anweisung verwenden:

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;
    }
}

Wenn Sie die Zeilen nach Geschlecht gruppieren könnten Sie in der Lage sein, dies noch einfacher zu machen, vor allem, wenn Sie wissen, dass das Geschlecht ist immer „männlich“ oder „weiblich“.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top