当前位置: 首页 > 知识库问答 >
问题:

迭代所有唯一的两元素组合

欧阳翔
2023-03-14

我需要迭代两个元素的所有组合:在集合[1,2,3,4]中,我想迭代[(1,2),(1,3),(1.4),(2,3),,(2,4),(3,4)]。是否有现有的工具可以执行此操作?

// Not what I need, works wrong!
for (Object o1 : set) {
  for (Object o2 : set) {
    if (o1 == o2) continue;
    ...
  }
}

这段代码将执行两倍于所需的操作,因为在两个循环中都将访问每个对象。

为此编写自己的方法是微不足道的,我只是不想发明轮子。我期望在Guava或Collections API中找到这个,但是没有找到这样的功能。

共有3个答案

段干茂实
2023-03-14

我不确定您将使用什么Set,但如果它具有随机访问,也就是说,如果您可以显式地请求位置I中的成员,那么您可以使用双forwith the second iterator渐变:例如。

for(i = 0; i < Set1_size; i++)
 for(j = i; j < Set1_size; i++)
{ o1.get(i).equals(o2); }

这样,您只需循环浏览之前比较的一半(实际上是主对角线的一半)。

谈琛
2023-03-14

continue替换为break几乎可以实现您想要的功能:它不会生成交换对。它还将开销减半(这是您不关心的)。

您只需交换o1o2o的名称即可获得所需的对。

正如注释中所指出的,Sets没有迭代顺序保证。因此,请务必事先将Set转换为List。对于大型集,这比配对本身要便宜得多(O(n)vsO(n*n))。

朱季
2023-03-14

https://code.google.com/p/combinatoricslib/简单组合部分说明了这个工具的用法。两种元素的组合会产生你想要的效果。

    // Create the initial vector
    ICombinatoricsVector<String> initialVector = Factory.createVector(
      new String[] { "red", "black", "white", "green", "blue" } );

   // Create a simple combination generator to generate 3-combinations of the initial vector
   Generator<String> gen = Factory.createSimpleCombinationGenerator(initialVector, 3);

   // Print all possible combinations
   for (ICombinatoricsVector<String> combination : gen) {
      System.out.println(combination);
   }
 类似资料:
  • 问题内容: 我将通过jsoup连接到一个url并获取它的所有内容,但问题是,如果我选择喜欢, 它返回一个元素,但是我想获取页面中的所有元素,例如,一个一个地迭代它们, 如果我选择使用body,我会在一行中得到结果,例如, 相反,我想选择所有元素并逐个迭代并产生如下结果: 使用jsoup可以吗? 谢谢, 卡尔提克 问题答案: 您可以使用选择器选择文档的所有元素,然后使用分别获取每个元素的文本。

  • 问题内容: 我有这个桌子; 我希望选择这样的行: 任一或= 。 另一个字段应该是唯一的。 即我想从表中选择唯一,或者我需要以下结果: 怎么做? 为什么?因为我希望构建一个类似于Facebook的收件箱,在该收件箱中,已发送和已接收的消息将被聚合,而此查询是迄今为止的瓶颈。 我正在使用Rails 3.2和Postgres 9.3。 问题答案: (not )从结果中删除重复项,从而不必要。您可能希望在

  • 我正在创建一个纸牌游戏,并希望迭代所有可能的纸牌组合。 例如(红心A,红心2),(红心A,黑桃2),(红心A,梅花2)等 我在用Java做这个 目前我有这个: 首先,我有 这是一副包含所有卡片的牌。然后我创建一个 现在我想遍历所有没有重复的卡片。 然而,我得到了一个。有人能给我一些关于如何做得更好的提示吗?

  • 假设我有一个由n个字符串列表组成的列表: result->包含所有输出列表(所有组合) current->是当前的组合 用上述相同示例调用此函数时的输出:

  • 问题内容: jQuery.unique允许您获取数组的唯一元素,但是文档说该函数主要供内部使用,并且仅对DOM元素起作用。另一个SO响应说该函数可以在数字上使用,但是此用例不一定是将来的证明,因为在文档中未明确说明。 鉴于此,是否存在“标准” jQuery函数,用于仅访问数组中的唯一值(特别是整数之类的基元)?(显然,我们可以使用函数构造一个循环,但是我们是jQuery的新手,并且想知道是否为此使

  • 问题内容: 在最近的一次采访中有人问我这个问题。 您将获得一个包含一百万个元素的数组。除了一个元素外,所有元素都是重复的。我的任务是找到独特的元素。 我的做法是要经过在整个数组循环,然后创建一个索引作为数组中和的数组中出现的次数。然后再次遍历我们的地图,并返回值为1的索引。 我说我的方法会花费时间。面试官告诉我要以低于复杂度的方式对其进行优化。我说过,我们不能,因为我们必须遍历具有一百万个元素的整