通过字典递归重新排列项目

Oxy*_*ron 2 c# recursion

我希望这个描述就足够了,用文字表达的最好方法就是给出一个现在的例子以及我想要它的例子.开始.

当我执行某个方法时,将生成一个结构.其中可能包含以下内容:

> Key: FaceBook, Value: Dinges 
> Key: SocialMedia, Value: FaceBook 
> Key: Medium, Value: SocialMedia
Run Code Online (Sandbox Code Playgroud)

这些是协会.据此,Dinges与FaceBook相关联,Facebook与SocialMedia相关联,而SocialMedia则与Medium相关联.

现在,我真正需要的是以下布局:

> Key: FaceBook, Value: Dinges 
> Key: SocialMedia, Value: FaceBook 
> Key: SocialMedia, Value: Dinges 
> Key: Medium, Value: SocialMedia 
> Key: Medium, Value: Facebook 
> Key: Medium, Value: Dinges
Run Code Online (Sandbox Code Playgroud)

我实际上不知道如何处理这个问题.任何帮助将不胜感激

Hei*_*nzi 5

所以,基本上,你想要创建源字典的传递闭包.如果字典中没有任何循环,则创建新的简单算法List<Tuple<string, string>>可能如下所示:

for each pair (key, value) in your dictionary:
    do
        list.add(key, value)
        if value is not a key in the dictionary, break loop
        value = dictionary(value)
    loop
Run Code Online (Sandbox Code Playgroud)

EDIT2:因为在C#中翻译很容易,你在这里:

Dictionary<string, string> dic = new Dictionary<string, string>(); // base data
dic.Add("FaceBook", "Dingens");
dic.Add("SocialMedia", "FaceBook");
dic.Add("Medium", "SocialMedia");

var list = new List<Tuple<string, string>>();  // result

foreach (var de in dic)
{
    var value = de.Value;
    do
    {
        list.Add(Tuple.Create(de.Key, value));
    } while (dic.TryGetValue(value, out value));
}

foreach (var x in list)
    Console.WriteLine(x.Item1 + ": " + x.Item2);
Run Code Online (Sandbox Code Playgroud)