首页 > 解决方案 > 如何检查最大数量是否大于1

问题描述

如果我有 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.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;
            }
        }

标签: c#arraysmax

解决方案


这可以用LINQ惯用地完成。

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 }

完整演示在这里


其他资源

Enumerable.GroupBy 方法

对序列的元素进行分组。

Enumerable.Select 方法

将序列的每个元素投影到新形式中。

Enumerable.OrderByDescending 方法

按降序对序列的元素进行排序。

Enumerable.FirstOrDefault 方法

返回序列的第一个元素,如果没有找到元素,则返回默认值。

匿名类型(C# 编程指南)

匿名类型提供了一种方便的方法,可以将一组只读属性封装到单个对象中,而无需先显式定义类型。类型名称由编译器生成,在源代码级别不可用。每个属性的类型由编译器推断。

语言集成查询 (LINQ)

语言集成查询 (LINQ) 是一组基于将查询功能直接集成到 C# 语言中的技术的名称。传统上,对数据的查询表示为简单的字符串,在编译时没有类型检查或 IntelliSense 支持。此外,您必须为每种类型的数据源学习不同的查询语言:SQL 数据库、XML 文档、各种 Web 服务等等。使用 LINQ,查询是一流的语言结构,就像类、方法、事件一样。您可以使用语言关键字和熟悉的运算符针对强类型的对象集合编写查询。


推荐阅读