gpt4 book ai didi

c# - 转换结构的算法(传递闭包?)

转载 作者:行者123 更新时间:2023-11-30 22:35:27 25 4
gpt4 key购买 nike

我的源代码结构是一个看起来像这样的字典:

new Dictionary<string, string>();
dic.Add("Dinges", new List<String>() { "A", "B" });
dic.Add("Facebook", new List<String>() { "Dinges" });
dic.Add("SocialMedia", new List<String>() { "FaceBook" });
dic.Add("Medium", new List<String>() { "SocialMedia" })

或者看起来像这样的元组列表:

new List<Tuple<String, String>>();
list.Add(Tuple.Create("Dinges", "A");
list.Add(Tuple.Create("Dinges", "B");
list.Add(Tuple.Create("Facebook", "Dinges");
list.Add(Tuple.Create("SocialMedia", "Facebook");
list.Add(Tuple.Create("Medium", "SocialMedia");

这些是项目之间的关联,也许最好描述为继承树。 Medium 是最通用的类​​别,A 是最专业的类别。

我正在寻找一种重新排列项目的方法,如下所示:

new List<Tuple<String, String>>();
list.Add(Tuple.Create("Dinges", "A");
list.Add(Tuple.Create("Dinges", "B");
list.Add(Tuple.Create("Facebook", "Dinges");
list.Add(Tuple.Create("Facebook", "A");
list.Add(Tuple.Create("Facebook", "B");
list.Add(Tuple.Create("SocialMedia", "A");
list.Add(Tuple.Create("SocialMedia", "B");
list.Add(Tuple.Create("SocialMedia", "Dinges");
list.Add(Tuple.Create("SocialMedia", "Facebook");
list.Add(Tuple.Create("Medium", "A");
list.Add(Tuple.Create("Medium", "B");
list.Add(Tuple.Create("Medium", "Dinges");
list.Add(Tuple.Create("Medium", "FaceBook");
list.Add(Tuple.Create("Medium", "SocialMedia");

我真的需要一些帮助来完成这个,我有一些关于传递闭包的技巧,但我真的不能;我无法理解它。非常感谢任何帮助。

最佳答案

根据字典方法,我认为它应该被声明为 Dictionary<string, List<string>> :

private static IEnumerable<string> TransitiveValues(string name,
Dictionary<string, List<string>> lookup)
{
yield return name;
List<string> children;
if (lookup.TryGetValue(name, out children))
{
foreach (string child in children)
{
foreach (string value in TransitiveValues(child, lookup))
{
yield return value;
}
}
}
}

然后:

var query = from name in dictionary.Keys
from value in TransitiveValues(name, dictionary)
select Tuple.Create(name, value);
var list = query.ToList();

只要确保您没有任何周期 :)

关于c# - 转换结构的算法(传递闭包?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7428076/

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