gpt4 book ai didi

c# - 如何使用 Linq 搜索分层数据

转载 作者:可可西里 更新时间:2023-11-01 08:41:24 25 4
gpt4 key购买 nike

我需要在树中搜索可能位于树中任何位置的数据。如何使用 linq 完成此操作?

class Program
{
static void Main(string[] args) {

var familyRoot = new Family() {Name = "FamilyRoot"};

var familyB = new Family() {Name = "FamilyB"};
familyRoot.Children.Add(familyB);

var familyC = new Family() {Name = "FamilyC"};
familyB.Children.Add(familyC);

var familyD = new Family() {Name = "FamilyD"};
familyC.Children.Add(familyD);

//There can be from 1 to n levels of families.
//Search all children, grandchildren, great grandchildren etc, for "FamilyD" and return the object.


}
}

public class Family {
public string Name { get; set; }
List<Family> _children = new List<Family>();

public List<Family> Children {
get { return _children; }
}
}

最佳答案

这是对 It'sNotALie. s answer 的扩展.

public static class Linq
{
public static IEnumerable<T> Flatten<T>(this T source, Func<T, IEnumerable<T>> selector)
{
return selector(source).SelectMany(c => Flatten(c, selector))
.Concat(new[] { source });
}
}

示例测试用法:

var result = familyRoot.Flatten(x => x.Children).FirstOrDefault(x => x.Name == "FamilyD");

返回 familyD对象。

您可以让它在 IEnumerable<T> 上工作来源太:

public static IEnumerable<T> Flatten<T>(this IEnumerable<T> source, Func<T, IEnumerable<T>> selector)
{
return source.SelectMany(x => Flatten(x, selector))
.Concat(source);
}

关于c# - 如何使用 Linq 搜索分层数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18165460/

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