当每个键共享相同的值时提取键组合

当每个键共享一个值时,我试图生成一个字符串键组合列表,下面是我的代码的摘录


var keyCombos = new List<List<string>>();

var dict = new Dictionary<string, List<int>>();

dict.Add("A", new List<int>() { 1, 2, 3 });

dict.Add("B", new List<int>() { 1, 2, 3, 4 });

dict.Add("C", new List<int>() { 1, 4, 5 });

上面是一个字典,其中包含一个字符串 Key 和一个整数列表作为其值,该keyCombos列表将保存共享整数列表值的所有键组合,我的预期输出keyCombos如下


["A","B","C"] //1 is common

["A","B"] //1,2,3 are common

["B","C"] //1,4 are common

["C"] //5

组合的顺序并不重要,到目前为止,我的代码使用各种foreach循环,我只能组合 2 个键,而不是 1 或 3。


foreach(var k1 in dict.Keys)

            {

                List<int> a1 = dict[k1];

                foreach (var k2 in dict.Keys)

                {

                    if (k1 != k2)

                    {

                        List<int> a2 = dict[k2];


                        if(a1.Intersect(a2).Count()>0)

                        {

                            var matches = false;

                            foreach(var combo in keyCombos)

                            {

                                if ((combo.Contains(k1)) && (combo.Contains(k2)))

                                {

                                    matches = true;

                                }

                            }

                            if (!matches)

                            {

                                keyCombos.Add(new List<string>() { k1, k2 });

                            }

                        }

                        else

                        {

                            keyCombos.Add(new List<string>() { k1 });

                        }

                    }                    

                }

            }


慕桂英546537
浏览 132回答 3
3回答

呼如林

我相信最简单的方法是首先从字典中获取不同的整数,然后遍历它们并使用 linq 获取该整数在列表中的键。喜欢:var distinctKeyCombos = dict.SelectMany(x => x.Value).Distinct();&nbsp;foreach(var i in distinctKeyCombos)&nbsp;{&nbsp; &nbsp; &nbsp;var keys = dict.Where(p => p.Value.Contains(i)).Select(p => p.Key);&nbsp;}
打开App,查看更多内容
随时随地看视频慕课网APP