【发布时间】:2021-08-07 16:00:12
【问题描述】:
我有一本这样的列表字典:
var dictOfLists = new Dictionary<string, List<string>>
{
["foo"] = new List<string>{ "a", "b", "c" },
["bar"] = new List<string>{ "d" },
["baz"] = new List<string>{ "e", "a" }
}
我想将其转换为唯一字典列表,如下所示:
var listOfUniqDicts = new List<Dictionary<string, string>>
{
new Dictionary<string, string> {["foo"] = "a", ["bar"] = "d", ["baz"] = "e" },
new Dictionary<string, string> {["foo"] = "a", ["bar"] = "d", ["baz"] = "a" },
new Dictionary<string, string> {["foo"] = "b", ["bar"] = "d", ["baz"] = "e" },
new Dictionary<string, string> {["foo"] = "b", ["bar"] = "d", ["baz"] = "a" },
new Dictionary<string, string> {["foo"] = "c", ["bar"] = "d", ["baz"] = "e" },
new Dictionary<string, string> {["foo"] = "c", ["bar"] = "d", ["baz"] = "a" },
}
(如您所见,在上面的列表中,每个字典都代表一个唯一的值组合,其键映射到初始字典的相应键。)
是否有一种干净的算法可以对上述类型的任意字典执行此操作?
【问题讨论】:
-
不,据我所知,没有预定义的自动 API 可以在一次原子调用中完成这样的事情。除非您正在寻找专门的数学集合库并找到它,否则您必须自己编写组合代码。当然,中等高级的 LINQ 查询可以做到这一点……否则会循环。
标签: c# list dictionary combinations combinatorics