Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在列表中查找最大对象字段值_C#_Linq - Fatal编程技术网

C# 在列表中查找最大对象字段值

C# 在列表中查找最大对象字段值,c#,linq,C#,Linq,我有以下课程: class MyClass{ string field1, field2; } 我的清单包含以下内容: list.Add(new MyClass("1","1")); list.Add(new MyClass("1","2")); list.Add(new MyClass("1","3")); list.Add(new MyClass("2","2")); list.Add(new MyClass("3","2")); 我想找到字段1的最频繁值,这种情况下,我有三倍于

我有以下课程:

class MyClass{
    string field1, field2;
}
我的清单包含以下内容:

list.Add(new MyClass("1","1"));
list.Add(new MyClass("1","2"));
list.Add(new MyClass("1","3"));
list.Add(new MyClass("2","2"));
list.Add(new MyClass("3","2"));

我想找到字段1的最频繁值,这种情况下,我有三倍于值1,一倍于值2,一倍于值3,如何获得字段1的最大计数值这种情况下是1?

您可以使用LINQ进行此操作

string result = list.GroupBy(entry => entry.field1)
    .Max(item => item.Count());
但您必须至少将field1公开,否则无法访问它

您的类MyClass没有一个构造函数来创建实例,就像您在示例代码中所做的那样

如果有多个元素具有相同数量的条目,则必须使用类似的内容

int maxCount = list.GroupBy(entry => entry.Field1)
    .OrderByDescending(grouping => grouping.Count())
    .First()
    .Count();

List<string> result = list.GroupBy(entry => entry.Field1)
    .Where(item => item.Count() == maxCount)
    .Select(x => x.Key)
    .ToList();
我把这句话分成两半,因为我认为它更容易理解和阅读


查看以获取更多信息。

如果只有一个field1值的出现次数最多,如OP中的示例所示,则简单的GroupBy后跟OrderByDescending将对您有所帮助

var maxOccuranceItem = list.GroupBy(x => x.field1)
                          .OrderByDescending(x => x.Count())
                          .First().Key;
输出

1
1 
2 
但是,如果有两组field1,在出现平局时具有相同的出现次数,我将使用以下

情景

list.Add(new MyClass("1","2"));
list.Add(new MyClass("1","3"));
list.Add(new MyClass("2","2"));
list.Add(new MyClass("2","2"));
list.Add(new MyClass("3","2"));
具有最大引用次数的多个项目的解决方案

var grouped = list.ToLookup(x => x.field1);
var maxOccuranceCount = grouped.Max(x => x.Count());
var maxOccuranceItems = grouped.Where(x => x.Count() == maxOccuranceCount)
                              .Select(x => x.Key).ToList(); 
输出

1
1 
2 

在任何一种情况下,正如其他人所提到的,属性都必须是公共的。

您可以使用group BYS来查找最大值或计数?@Reniuz,不确定,但我认为OP希望最大值字段1 bun出现,而不是int。如果您有一个项。字段如果所有元素出现的次数相同,该怎么办?