再会!
我有一个字典 Dictionary<long, List<long>>,其中 List 的值可以是字典的键。

我想要做的是将这个字典的键和值分开来设置代表链接元素。所以如果我有

dict[1] = new List<long>() { 12, 4, 2 };
dict[2] = new List<long>() { 7 };
dict[3] = new List<long>() { 25, 19, 27 };

我想得到两个输出集 { 1, 12, 4, 2, 7 } 和 { 3, 25, 19 27 };

我找到了一个解决方案,但它看起来不够快。
 List<HashSet<long>> graphs = new List<HashSet<long>>();
 foreach (var kv in dict)
 {
     HashSet<long> maybeNewGraph = new HashSet<long>(kv.Value);
     maybeNewGraph.Add(kv.Key);

     bool success = false;
     foreach (var hashSet in graphs)
     {
        if (hashSet.Overlaps(maybeNewGraph))
        {
            hashSet.UnionWith(maybeNewGraph);
            success = true;
            break;
        }
     }
     if (!success)
     {
        graphs.Add(maybeNewGraph);
     }
 }

对于这样的问题有更好的解决方案吗?
谢谢你。

UPD :更正的例子。谢谢斯维克

最佳答案

在我看来,您正在尝试实现一种算法来解决 不相交集 。幸运的是,网络上有现有技术。现在我已经向您提供了正确的搜索词,Wikipedia 是一个不错的起点。

这是一个 c# implementation 。我不能保证它的效率。

关于c# - 查找链接元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7837488/

10-12 21:21