2 Stimmen

Anzahl der Wiederholungen im mehrdimensionalen Array

Ich muss die Anzahl der Wiederholungen und die Position, an der sie sich wiederholen, für alle Zahlen in einem mehrdimensionalen Array zählen:

1 2 1
1 1 2
2 3 1

Und das Ergebnis muss es auch sein:

Number 1-  two times on position 1, one time on position 2, two times on position 3
Number 2-  one time on position 1, two times on position 2, one times on position 3
Number 3-  0 on position 1, one time on position 2, 0 on position 3

Wie kann ich das tun? Danke!

2voto

Steven Punkte 157957

Der Trick besteht darin, das mehrdimensionale Array so zu definieren, dass es einfach zu verarbeiten ist.

Das 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("Number " + number + "-  ");
    for (int index = 0; index < jaggedArray.Length; index++)
    {
        int[] innerArray = jaggedArray[index];

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

        Console.Write(count + " times on position " + (index + 1) + ", ");
    }

    Console.WriteLine();
}

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

1voto

Filip Ekberg Punkte 35716

Das Ergebnis könnte in etwa 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("Number {0} - ", number.Key.ToString()));
    foreach (var occurence in number.Value)
    {
        Console.WriteLine("{0} times at position {1},", 
             occurence.Value.ToString(), 
             (occurence.Key+1).ToString());
    }
}

So könnte man es lösen, mit 2 Wörterbüchern!

    static Dictionary<int, Dictionary<int, int>> 
                           CountEachNumber(int[,] list, int height, int width)
    {
        // Containging
        //      Number
        //      Information
        //          Line
        //          Occurences
        var dict = new Dictionary<int, Dictionary<int,int>>();

        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<int, int>();
                    val.Add(a, 1);
                    dict.Add(number, val);
                }
            }
        }

        return dict;

    }

Ich speichere also die Zahl in einem Wörterbuch und füge für jedes Vorkommen die Zeile hinzu und erhöhe den Inkrementer!

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