gpt4 book ai didi

c# - 在 List> 类型上使用 FindAll

转载 作者:行者123 更新时间:2023-11-30 14:19:29 24 4
gpt4 key购买 nike

假设

public class MyClass
{
public int ID {get; set; }
public string Name {get; set; }
}

List<MyClass> classList = //populate with MyClass instances of various IDs

我可以

List<MyClass> result = classList.FindAll(class => class.ID == 123);

这将给我一个 ID = 123 的类列表。效果很好,看起来很优雅。

现在,如果我有

List<List<MyClass>> listOfClassLists = //populate with Lists of MyClass instances

如何获得过滤列表,其中列表本身已被过滤。我试过了

List<List<MyClass>> result = listOfClassLists.FindAll
(list => list.FindAll(class => class.ID == 123).Count > 0);

它看起来很优雅,但不起作用。它只包括类列表,其中至少一个类的 ID 为 123,但它包括该列表中的所有 MyClass 实例,而不仅仅是匹配的实例。

我最终不得不做

List<List<MyClass>> result = Results(listOfClassLists, 123);

private List<List<MyClass>> Results(List<List<MyClass>> myListOfLists, int id)
{
List<List<MyClass>> results = new List<List<MyClass>>();
foreach (List<MyClass> myClassList in myListOfLists)
{
List<MyClass> subList = myClassList.FindAll(myClass => myClass.ID == id);
if (subList.Count > 0)
results.Add(subList);
}
return results;
}

它完成了工作,但不是那么优雅。只是在寻找更好的方法来对列表的列表执行 FindAll。

最佳答案

listOfClasses.SelectMany(x=>x).FindAll(/* yadda */)

抱歉,FindAll 是 List 的一个方法。

这个

var result = from x in listOfClasses from y in x where SomeCondition(y) select y;

var result = listOfClasses.SelectMany(x=>x).Where(x=>SomeCondition(x));

关于c# - 在 List<List<T>> 类型上使用 FindAll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2595212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com