C# 查找整数数组中前3个最大重复数的步骤
我想找出整数数组中最大重复数的前3个 下面是我尝试过的一段代码,但找不到想要的结果:C# 查找整数数组中前3个最大重复数的步骤,c#,C#,我想找出整数数组中最大重复数的前3个 下面是我尝试过的一段代码,但找不到想要的结果: static void Main(string[] args) { int[,] numbers = { {1, 2, 0, 6 }, {5, 6, 7, 0 }, {9, 3, 6, 2 },
static void Main(string[] args)
{
int[,] numbers = {
{1, 2, 0, 6 },
{5, 6, 7, 0 },
{9, 3, 6, 2 },
{6, 4, 8, 1 }
};
int count = 0;
List<int> checkedNumbers = new List<int>();
foreach (int t in numbers)
{
if (!checkedNumbers.Contains(t))
{
foreach (int m in numbers)
{
if (m == t)
{
count++;
}
}
Console.WriteLine("Number {0} is Repeated {1} Times ", t, count);
count = 0;
checkedNumbers.Add(t);
}
}
Console.ReadLine();
}
static void Main(字符串[]args)
{
整数[,]个数={
{1, 2, 0, 6 },
{5, 6, 7, 0 },
{9, 3, 6, 2 },
{6, 4, 8, 1 }
};
整数计数=0;
List checkedNumbers=新列表();
foreach(整数t)
{
如果(!checkedNumbers.Contains(t))
{
foreach(整数m)
{
如果(m==t)
{
计数++;
}
}
WriteLine(“数字{0}重复了{1}次”,t,count);
计数=0;
检查编号。添加(t);
}
}
Console.ReadLine();
}
int[]数字={1,2,3,5,6,32,2,4,42,2,4,4,5,6,3,4};
var counts=新字典();
foreach(数值中的变量编号)
{
计数[数]=计数[数]+1;
}
var top3=counts.OrderByDescending(x=>x.Value)。选择(x=>x.Key)。获取(3);
提示:
您可以在LINQ的帮助下完成此操作。这是查找最常见元素的代码:-
List<int> list = new List<int>() { 1,1,2,2,3,4,5 };
// group by value and count frequency
var query = from i in list
group i by i into g
select new {g.Key, Count = g.Count()};
// compute the maximum frequency
int frequency = query.Max(g => g.Count);
// find the values with that frequency
IEnumerable<int> modes = query
.Where(g => g.Count == frequency)
.Select(g => g.Key);
// dump to console
foreach(var mode in modes) {
Console.WriteLine(mode);
}
List List=newlist(){1,1,2,2,3,4,5};
//按值和计数频率分组
var query=来自列表中的i
第i组由i变成g
选择新{g.Key,Count=g.Count()};
//计算最大频率
int frequency=query.Max(g=>g.Count);
//找到具有该频率的值
IEnumerable modes=查询
.其中(g=>g.计数==频率)
.选择(g=>g.Key);
//转储到控制台
foreach(模式中的var模式){
控制台写入线(模式);
}
以同样的方式,您也可以找到另外两个。您可以使用from LINQ,然后根据每组中的计数:
var result = list.GroupBy(i => i)
.OrderByDescending(g => g.Count())
.Select(g => g.Key)
.Take(3);
编辑:对于您的代码,您可以使用类型为的
来展平矩阵,然后使用上面的代码:
int[,] numbers = {
{1, 2, 0, 6 },
{5, 6, 7, 0 },
{9, 3, 6, 2 },
{6, 4, 8, 1 }
};
var list = numbers.OfType<int>();
int[,]个数字={
{1, 2, 0, 6 },
{5, 6, 7, 0 },
{9, 3, 6, 2 },
{6, 4, 8, 1 }
};
var list=numbers.OfType();
我发现现有的答案都没有提供解释,所以我将尝试解释
您需要做的是计算每个项目在数组中出现的次数。为此,有多种方法(字典、linq等)。可能最容易使用包含数字的字典,以及数字出现的次数:
int numbers[] = {1, 3, 6, 10, 9, 3, 3, 1, 10} ;
Dictionary<int, int> dic = new Dictionary<int, int>();
如果字典不存在,它会自动添加一个新项目,因此我们只需执行dic[i]++代码>
接下来,我们需要得到最高的3个值。同样,有很多方法可以做到这一点,但最简单的方法是对其进行排序
var sorted_dic = dic.OrderByDescending(x => x.Value);
现在,sorted\u dic
中的前3项将是您要查找的3个值。
有多种方法可以仅获取这3种,例如使用Take
方法:
var first_3 = sorted_dic.Take(3);
现在,您可以迭代这3个值,例如在屏幕上打印它们:
foreach (var i in first_3)
{
Console.Write("{0} appeared {1} times.", i.Key, i.Value);
}
我已经发布了我尝试过的代码。看一看,如果我做错了什么,就给我提建议。请用你的代码检查我的答案
var first_3 = sorted_dic.Take(3);
foreach (var i in first_3)
{
Console.Write("{0} appeared {1} times.", i.Key, i.Value);
}