2 Stimmen

Anzahl der Wiederholungen in mehrdimensionalen Array

Ich muss die Anzahl der Wiederholungen und die Position, an der sie in allen Zahlen im mehrdimensionalen Array wie diesem wiederholt werden, zählen:

1 2 1
1 1 2
2 3 1

Und das Ergebnis sollte sein:

Zahl 1 - zweimal an Position 1, einmal an Position 2, zweimal an Position 3
Zahl 2 - einmal an Position 1, zweimal an Position 2, einmal an Position 3
Zahl 3 - 0 an Position 1, einmal an Position 2, 0 an Position 3

Wie kann ich das machen? Danke!

2voto

Steven Punkte 157957

Der Trick besteht darin, Ihr mehrdimensionales Array so zu definieren, dass es einfach zu verarbeiten wird.

Dies sollte funktionieren.

int[][] jaggedArray =
{
    new[] { 1, 1, 2 },
    new[] { 2, 1, 3 },
    new[] { 1, 2, 1 }
};

foreach (var number in Enumerable.Range(1, 3))
{
    Console.Write("Nummer " + number + "-  ");
    for (int index = 0; index < jaggedArray.Length; index++)
    {
        int[] innerArray = jaggedArray[index];

        var count = innerArray.Count(n => n == number);

        Console.Write(count + " Mal an Position " + (index + 1) + ", ");
    }

    Console.WriteLine();
}

Was bekomme ich dafür, dass ich deine Hausaufgaben mache? :-)

1voto

Filip Ekberg Punkte 35716

Das Ergebnis könnte so aussehen:

var listOfLists = new int[,] {
        {1,2,1},
        {1,1,2},
        {2,3,1}
};

var dict = CountEachNumber(listOfLists, 3, 3);

foreach (var number in dict)
{
    Console.WriteLine(string.Format("Nummer {0} - ", number.Key.ToString()));
    foreach (var occurence in number.Value)
    {
        Console.WriteLine("{0} mal an Position {1},", 
             occurence.Value.ToString(), 
             (occurence.Key+1).ToString());
    }
}

So könnten Sie es lösen, mit 2 Dictionaries!

    static Dictionary> 
                           CountEachNumber(int[,] list, int height, int width)
    {
        // Enthält
        //      Nummer
        //      Informationen
        //          Linie
        //          Vorkommen
        var dict = new Dictionary>();

        for (int i = 0; i < height; i++)
        {
            for (int a = 0; a < width; a++)
            {
                var number = list[i, a];
                if (dict.ContainsKey(number))
                {

                    if (dict[number].ContainsKey(a))
                    {
                        dict[number][a]++;
                    }
                    else
                    {
                        dict[number].Add(a, 1);
                    }
                }
                else
                {
                    var val = new Dictionary();
                    val.Add(a, 1);
                    dict.Add(number, val);
                }
            }
        }

        return dict;

    }

Also, was ich hier mache, ist die Nummer in einem Dictionary zu speichern und für jede ihrer Vorkommen füge ich die Linie hinzu und erhöhe den Zähler!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X