如何选择包含大多数项目的列表?

时间:2015-09-15 15:55:47

标签: c# linq list

有没有办法比较两个列表然后返回包含最多项目的列表?最好使用snitzy和优雅的LINQ查询。

{{1}}

4 个答案:

答案 0 :(得分:4)

这里不需要Linq:

 List<Item> listWithMostItems = list1.Count > list2.Count ? list1 : list2;

设置条件以获取所需的列表,以防两个列表包含相同数量的元素

答案 1 :(得分:4)

如果您只有2个列表solution provided by Marrow最有效,但如果您有更多列表,请说IEnumerable<List<string>>您最好使用MaxBy from moreLINQ或对输入进行排序并采取排序集合中的第一个元素:

List<Item> listWithMostItems = lists.OrderByDescending(x => x.Count).First();

答案 2 :(得分:0)

List<Item> listWithMostItems = list2.Count > list1.Count ? list2 : list1;

答案 3 :(得分:0)

我不确定这个效率,但如果你想要选择大量列表中最长列表的东西,你应该编译一个主List< List<string> >并按其长度排序。如果您有多个具有相同最大长度的列表并且您需要所有这些列表,则需要先GroupBy

var combinedLists = new List<List<string>> {list1, list2, list3, list4};
var groupsOfListsWithMaxLength = combinedLists
     .GroupBy( l => l.Count)
     .OrderByDescending(g => g.Key)
     .First(); //null handle if needed with FirstOrDefault


foreach (var strList in groupsOfListsWithMaxLength )
{
     //do stuff.  The first group is a collection of all lists with the max length
}

Demo