C# 搜索列表的列表
我的目标如下:C# 搜索列表的列表,c#,.net,linq,C#,.net,Linq,我的目标如下: List<List<MyObj>> lst; 并且还尝试使用Any(),但运气不佳。您可以使用来展平列表,然后过滤元素: var result = lst.SelectMany(x => x).Where(y => y.ID == "1").ToList(); List list1=lst.SelectMany(x=>x.Where(y=>y.ID==“1”)).ToList(); 或 List list2=lst.Where(x=>x.
List<List<MyObj>> lst;
并且还尝试使用Any()
,但运气不佳。您可以使用来展平列表,然后过滤元素:
var result = lst.SelectMany(x => x).Where(y => y.ID == "1").ToList();
List list1=lst.SelectMany(x=>x.Where(y=>y.ID==“1”)).ToList();
或
List list2=lst.Where(x=>x.Any(y=>y.ID==“1”)).ToList();
结果取决于你想要什么。是你的朋友。例如:
var listOfListsOfStrings = new List<List<string>>();
listOfListsOfStrings.Add(new List<string>() {"a", "b"});
listOfListsOfStrings.Add(new List<string>() {"c", "d"});
var allStrings = listOfListsOfStrings.SelectMany(s => s);
Console.WriteLine(string.Join(", ", allStrings.ToArray())); //prints: a, b, c, d
让我在已经很好的选项集中添加另一个选项。它使用
Hashset
进行搜索,通过转换内部列表
,这将在数据大小更大时有所帮助,因为Hashset
对列表
有O(1)搜索,而不是O(N)搜索
结果
的类型为列表
,将对其进行筛选,目前我们正在向可枚举项提供Func
。其中
,当在运行时提供数据时,则更容易构造表达式
,它在运行时被编译成正确的Func
delegate以过滤实际列表所需的输出是什么?包含MyObj
的列表或对象本身?您需要找到匹配的MyObj对象或包含它们的列表吗?或者你甚至需要过滤这些列表?获取objects@PlexisPlexis:因此列出所需结果?所需输出的格式应该是什么???是List
还是List
?还是lst.SelectMany(x=>x.Where(y=>y.ID==“1”)).ToList()
@TimSchmelter我不认为有太大的区别,只是你的变体创建的枚举数比我的多得多。我怀疑是否存在性能差异。对某些人来说,它可能更容易阅读或理解。@GiladGreen没有必要写“明显的船长”评论
List<MyObj> list1 = lst.SelectMany(x => x.Where(y=> y.ID== "1")).ToList();
List<List<MyObj>> list2 = lst.Where(x => x.Any(y=> y.ID== "1")).ToList();
var listOfListsOfStrings = new List<List<string>>();
listOfListsOfStrings.Add(new List<string>() {"a", "b"});
listOfListsOfStrings.Add(new List<string>() {"c", "d"});
var allStrings = listOfListsOfStrings.SelectMany(s => s);
Console.WriteLine(string.Join(", ", allStrings.ToArray())); //prints: a, b, c, d
lst.SelectMany(x => x).Where(y => y.ID == "1")
List<List<MyObj>> lst;
var result = lst.where(x =>
{
// Assuming ID to be string type
var hashset = new Hashset<string>(x.Select(y => y.ID));
return hashset.Contains("1");
}
);
var result = lst.where(x => x.Any(y => y.ID == "1"));