C# 多维数组中的重复次数

C# 多维数组中的重复次数,c#,.net,asp.net,vb.net,C#,.net,Asp.net,Vb.net,我需要在多维数组中计算重复的次数和重复的位置,如下所示: 1 2 1 1 1 2 2 3 1 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("N

我需要在多维数组中计算重复的次数和重复的位置,如下所示:

1 2 1
1 1 2
2 3 1
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());
    }
}
结果必须是:

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

我怎么能做到?谢谢

诀窍是定义多维数组,使处理数组变得容易

这应该行得通

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();
}
int[]jaggedArray=
{
新[]{1,1,2},
新[]{2,1,3},
新[]{1,2,1}
};
foreach(可枚举范围(1,3)中的变量数)
{
控制台。写入(“数字”+数字+“-”);
for(int index=0;indexn==number);
控制台。写入(计数+“位置上的次数”+(索引+1)+“,”);
}
Console.WriteLine();
}

我给你做作业能得到什么?:-)

结果可能是这样的:

1 2 1
1 1 2
2 3 1
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());
    }
}
这就是你可以用两本字典来解决它的方法

    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;

    }
静态字典
CountEachNumber(整数[,]列表,整数高度,整数宽度)
{
//包含
//数
//信息
//线
//发生
var dict=新字典();
对于(int i=0;i

因此,我在这里做的是,我将数字存储在一个字典中,对于它的每一次出现,我添加行并增加增量

家庭作业?到目前为止,你想出了什么主意?
第2-[…]位第2-[…]位一次[…]
,不是吗?当你使用lambda时,这是作弊!)很好。只需使用可用的工具:-)