如何只循环一次组合

Posted

技术标签:

【中文标题】如何只循环一次组合【英文标题】:How to loop through a combination only once 【发布时间】:2018-11-24 22:30:28 【问题描述】:

我在 Excel 中使用 vba,我希望循环遍历一组数字,但我希望只循环一次组合。我目前正在遍历所有排列,这会导致重复组合。例如:

For i = 1 to 4
    'execute some code
    For k = 1 to 4
        'execute some code
    Next
Next

这将给出 i 和 j 的以下组合:

[1,1] dont want as 1 is repeated twice
[1,2] yes please
[1,3] yes please
[1,4] yes please
[2,1] dont want as [1,2] was already given, the order doesnt matter
[2,2] dont want as 2 is repeated twice
[2,3] yes please
[2,4] yes please
etc.

赶上我的漂移?以下帖子也涉及它,但不幸的是它在 Java 中,我无法理解它背后的逻辑以使其适用于 Excel 中的 vba:loop through combination once。我通过仅使用两个变量 i 和 j 来简化我的解释,实际上它是更多的组合(最多 8 个 For 循环)并且它们从大约 100 到 900 循环,这需要极长的处理时间来完成所有排列。因此希望对如何仅处理独特的组合有所了解,这将大大减少处理时间。

任何帮助将不胜感激

【问题讨论】:

对于 k = 1 + i 到 4 【参考方案1】:

Java 代码所做的就是从外部循环所在的位置开始内部循环,+1

For i = 1 to 4
    'execute some code
    For k = i + 1 to 4
        Debug.Print i, k
        'execute some code
    Next
Next

生产

1 2 1 3 1 4 2 3 2 4 3 4

【讨论】:

哇,真的可以这么简单吗!?我试图弄清楚它是否跳过任何​​组合,似乎不是这样? 谢谢一百万!您的帮助对我来说意义重大! 如果我可能变得贪婪 :-) 如何事先计算迭代次数以衡量该过程需要多长时间? 迭代次数 = n(n-1)/2。所以对于 n=4,= 4×3/2 = 6

以上是关于如何只循环一次组合的主要内容,如果未能解决你的问题,请参考以下文章

如何使一行代码在循环中运行一次,并且只运行下一行代码,直到前一行运行一次?

如何在while循环中只打印一次帖子?

如何在 SQL 中制定 FOR EACH 循环?

如何在游戏循环中只检测一次碰撞而不是连续检测碰撞?

如何在python中只执行一次我的if循环?

错误处理只工作一次