【发布时间】:2012-03-24 09:29:29
【问题描述】:
我有一个问题确实是一个一般性的编程问题,但我的实现是用 Java 实现的,所以我会以这种方式提供我的示例
我有这样的课:
public class Foo {
LinkedHashMap<String, Vector<String>> dataStructure;
public Foo(LinkedHashMap<String, Vector<String>> dataStructure) {
this.dataStructure = dataStructure;
}
public String[][] allUniqueCombinations() {
//this is what I need to do
}
}
我需要从我的LinkedHashMap 生成一个嵌套数组,它代表 LHM 中所有值的每个唯一组合。例如,如果我的 LHM 看起来像这样(伪代码,但我认为您可以理解..):
{"foo" => ["1","2","3"], "bar" => ["3","2"], "baz" => ["5","6","7"]};
那么我的String[][] 应该是这样的:
{
{"foo","bar","baz"},
{"1","3","5"},
{"1","2","5"},
{"1","3","6"},
{"1","2","6"},
{"1","3","7"},
{"1","2","7"},
{"2","3","5"},
{"2","2","5"},
{"2","3","6"},
{"2","2","6"},
{"2","3","7"},
{"2","2","7"},
{"3","3","5"},
{"3","2","5"},
{"3","3","6"},
{"3","2","6"},
{"3","3","7"},
{"3","2","7"},
}
我想这就是全部,我是手动制作的(显然)所以我可能错过了一组,但我认为这说明了我正在尝试做的事情。只要存在所有独特的组合,每组的顺序无关紧要。另外要清楚的是,您不知道 LHM 中有多少元素,也不知道每个后续向量中有多少元素。我找到了与您希望单个数组中所有元素的每个唯一组合的情况相匹配的答案,但没有什么完全适合这个。
更新:我将类型更改为字符串,因为我的真实示例实际上是字符串。我试图使用整数来使示例更具可读性,但是到目前为止我得到的答案并不能很好地转换为字符串。所以,是的,它们是数字,但在我的实际情况下,它们将是对除了使用此特定应用程序的人之外的任何人都没有多大意义的字符串。所以,这只是它的抽象。
【问题讨论】:
-
快速提问 - 为什么是
Vector? stackoverflow.com/questions/1386275/… -
为什么所有的uniqueCombinations都是长度为3的?输入中的条目[3,2]有什么意义?
-
@josh.trow 它是一个向量,因为它是一个向量。我没有给你很好的解释。我不是静态类型的忠实粉丝。
-
@Adam 唯一组合的长度为 3,因为在这种情况下 dataStructure.size() == 3。如果 dataStructure 的顶层有 4 个元素,那么每个元素都是 4..
-
LHM中
Integer键的意义是什么?组合数组的排序应该基于键的顺序,还是 LHM 的排序? (即,如果我按顺序将键 3、2、1 添加到 LHM,我应该使用相同的顺序还是 1、2、3)假设我有键 1、2、4、6 的映射......应该组合数组跳过 3 和 5 还是使用一些特殊值? (例如 0、-1 等)
标签: java data-structures recursion nested-loops linkedhashmap