C# 如何检查最大数量是否超过1
如果我有int[]number={1,1,2,2,3,4},我想找到出现最多的数字,但在这种情况下,出现最多的数字是2 1和2,如果发生这种情况,那么我想做一个符号,如果在这个数组中出现的最大数字数大于1,代码:C# 如何检查最大数量是否超过1,c#,arrays,max,C#,Arrays,Max,如果我有int[]number={1,1,2,2,3,4},我想找到出现最多的数字,但在这种情况下,出现最多的数字是2 1和2,如果发生这种情况,那么我想做一个符号,如果在这个数组中出现的最大数字数大于1,代码: int count = 1, tempCount; int frequentNumber = number[0]; int tempNumber = 0; for (int i = 0; i < (number.Le
int count = 1, tempCount;
int frequentNumber = number[0];
int tempNumber = 0;
for (int i = 0; i < (number.Length - 1); i++)
{
tempNumber = number[i];
tempCount = 0;
for (int j = 0; j < number.Length ; j++)
{
if (tempNumber == number[j])
{
tempCount++;
}
}
if (tempCount > count)
{
frequentNumber = tempNumber;
count = tempCount;
}
}
如果您想知道一个数字有多少次重复:
numbers.GroupBy(x => x).Max(g => g.Count())
如果您想知道重复次数和重复次数:
var e = numbers.GroupBy(x => x).OrderByDescending(g => g.Count()).First();
e.Key //the number
e.Count() //the repetition count
如果您只想知道数组中是否充满了唯一的数字:
numbers.Length == numbers.Distinct().Count()
如果您不能/可能不使用LINQ:
int max = 0;
int what = -1;
var d = new Dictionary<int, int>();
foreach(var x in numbers){
if(!d.ContainsKey(x))
d[x] = 0;
d[x]++;
if(d[x] > max){
max = d[x];
what = x;
}
}
与使用LINQ groupby的早期技术类似;可以枚举分组,其中g=>g.Count==max,但最容易单独捕获max,可能是将分组放入变量,然后将where max作为另一个操作:
var group = numbers.GroupBy(x => x);
var maxCount = group.Max(g = g.Count());
var maxNums = group.Where(g => g.Count() == maxCount);
这可以用LINQ习惯性地完成 输出 额外资源 对序列的元素进行分组 将序列中的每个元素投影到新形式中 按降序排列序列的元素 返回序列的第一个元素,如果没有,则返回默认值 元素被找到 匿名类型提供了一种封装一组 将只读属性转换为单个对象,而无需显式 首先定义一个类型。类型名由编译器生成,并且是 在源代码级别不可用。每个属性的类型为 由编译器推断 语言集成查询LINQ是一组技术的名称 基于将查询功能直接集成到C语言中 语言传统上,对数据的查询表示为简单 在编译时未进行类型检查或IntelliSense支持的字符串。 此外,您还必须为每个查询学习不同的查询语言 数据源类型:SQL数据库、XML文档、各种Web 服务等等。使用LINQ,查询是一种一流的语言 构造,就像类、方法、事件一样。您编写查询 使用语言对对象的强类型集合进行攻击 关键词和熟悉的运算符 编辑:
此代码用于每个循环,检查tempCount是否等于count,然后将符号设置为true。如果在下一个循环中出现新的循环,并且它的tempCount更大,符号将重置为false。你的意思是我想知道数组中的数字是否唯一?为什么在循环中循环?只在阵列中循环一次会更容易。你可以使用dictionary和Linq吗?@CaiusJard不,我想打印最多的事件,但是,如果有两个或两个以上的数字具有最高的出现次数,我不知道如何让我知道数组中有两个或两个以上的数字具有最高的出现次数。尽管您的代码可能有效,并且您花了一些时间来回答问题,解释发生了什么以及为什么你的问题是正确答案是一个好主意。
var group = numbers.GroupBy(x => x);
var maxCount = group.Max(g = g.Count());
var maxNums = group.Where(g => g.Count() == maxCount);
int[] number = {1, 1, 2, 2, 3, 4};
var result = number
.GroupBy(x => x) // group your numbers
.Select(x => new {x.Key, Count = x.Count()}) // project
.GroupBy(x => x.Count) // group the count
.OrderByDescending(x => x.Key) // order by count
.FirstOrDefault(); // pick the highest group
foreach (var item in result)
Console.WriteLine(item);
{ Key = 1, Count = 2 }
{ Key = 2, Count = 2 }
int count = 1, tempCount;
bool isMultiple=false; //the sign
int frequentNumber = number[0];
int tempNumber = 0;
for (int i = 0; i < (number.Length - 1); i++)
{
tempNumber = number[i];
tempCount = 0;
for (int j = 0; j < number.Length ; j++)
{
if (tempNumber == number[j])
{
tempCount++;
}
}
if(tempCount == count)
{
isMultiple = true;
}
else if (tempCount > count)
{
frequentNumber = tempNumber;
count = tempCount;
isMultiple = false;
}
}