您是否知道一些简洁的Java库,允许您制作两个(或更多)集的笛卡尔积?
例如:我有三套.一个是Person类的对象,第二个是类Gift的对象,第三个是GiftExtension类的对象.
我想生成一个包含所有可能的三元组Person-Gift-GiftExtension的集合.
集的数量可能会有所不同,所以我不能在嵌套的foreach循环中执行此操作.在某些情况下,我的应用程序需要制作一个Person-Gift对的产品,有时它是三人Person-Gift-GiftExtension,有时甚至可能会设置Person-Gift-GiftExtension-GiftSecondExtension-GiftThirdExtension等.
我想用Java 计算任意数量的非空集的笛卡尔积.
我写过那个迭代代码......
public static <T> List<Set<T>> cartesianProduct(List<Set<T>> list) {
List<Iterator<T>> iterators = new ArrayList<Iterator<T>>(list.size());
List<T> elements = new ArrayList<T>(list.size());
List<Set<T>> toRet = new ArrayList<Set<T>>();
for (int i = 0; i < list.size(); i++) {
iterators.add(list.get(i).iterator());
elements.add(iterators.get(i).next());
}
for (int j = 1; j >= 0;) {
toRet.add(Sets.newHashSet(elements));
for (j = iterators.size()-1; j >= 0 && !iterators.get(j).hasNext(); j--) {
iterators.set(j, list.get(j).iterator());
elements.set(j, iterators.get(j).next());
}
elements.set(Math.abs(j), iterators.get(Math.abs(j)).next());
}
return toRet;
}
Run Code Online (Sandbox Code Playgroud)
......但我发现它相当不优雅.有人有更好的,仍然是迭代的解决方案吗?使用一些奇妙的功能性方法的解决方案?否则......关于如何改进它的建议?错误?
我有java代码从文本文件填充哈希映射.
HashMap<String, String[]> data = new HashMap<String, String[]>();
我用它来制作键值对.值是一个字符串数组.我必须迭代键值对的每个可能的组合(所以也必须迭代String [] - 数组).这适用于java,但现在我必须将其移植到delphi.有可能这样做吗?如何?谢谢!
我有一个ArrayList [] myList,我正在尝试创建一个列表,列出数组中值的所有排列.
示例:(所有值均为字符串)
myList[0] = { "1", "5", "3", "9" };
myList[1] = { "2", "3" };
myList[2] = { "93" };
Run Code Online (Sandbox Code Playgroud)
myList的计数可以变化,因此事先不知道它的长度.
我希望能够生成一个类似于以下所有排列的列表(但有一些额外的格式).
1 2 93
1 3 93
5 2 93
5 3 93
3 2 93
3 3 93
9 2 93
9 3 93
Run Code Online (Sandbox Code Playgroud)
这是否理解我想要完成的事情?我似乎无法想出这样做的好方法,(如果有的话).
编辑:
我不确定递归是否会干扰我以自己的方式格式化输出的愿望.对不起我之前没有提到我的格式.
我想最终构建一个string []数组,其中包含如下格式的所有组合:
对于"1 2 93"排列
我希望输出为"val0 = 1; val1 = 2; val2 = 93;"
我现在将尝试递归.谢谢Dr.Jokepu