【发布时间】:2015-04-13 15:01:12
【问题描述】:
我有一个Dictionary<string, HashSet<string>>,我想通过它找到 HashSet 中所有可能的组合,而不需要任何重复。例如(虚拟数据):
Keys Values (HashSet)
"greeting" "Hello" "Hi" "Hey" "Howdy" ...
"Name" "Tom" "Angel" "Edward" ...
"question" "how are you?" "can you help me?" "is everything okay?" ...
... ...
... ....
我希望输出是某种集合,每个值都为:
"Hello Tom how are you?"
"Hello Tom can you help me?"
"Hello Tom is everything okay?"
"Hello Angel how are you?"
"Hello Angel can you help me?"
"Hello Angel is everything okay?"
"Hello Edward how are you?"
...
"Hi Tom how are you?"
"Hi Tom can you help me?"
"Hi Tom is everything okay?"
"Hi Angel how are you?"
...
我希望这个尽可能抽象,以便我可以在哈希集中添加任意数量的键和值。
我曾尝试以递归方式执行此操作,但我对此并不太擅长,我无法提出基本情况...我认为您可以使用 linq 执行此操作,但我对 linq 一点也不熟悉。
我使用Dictionary<string, HashSet<string>> 的原因是因为我收集信息的方式,所以我想保留这个数据结构。
谢谢!
【问题讨论】:
-
搜索“排列”。
-
@CoderDennis:这不是我想要的,我想用一个哈希集字典来做到这一点,我对如何处理这个问题感到困惑。我还想用第二个键的哈希集的第一个值来获取第一个键的哈希集的第一个值,依此类推,直到我到达最后一个哈希集,然后再做一遍,除了最后一个哈希的第二个值...... . 我不知道这是否有意义
-
这正是该问题的答案所显示的。您的输出不使用密钥,因此不会改变任何内容。只考虑你的价值观,你基本上得到了
IEnumerable<IEnumerable<string>>。
标签: c# linq dictionary recursion combinatorics