【问题标题】:C# Every item in array with every other item in same array [duplicate]C#数组中的每个项目与同一数组中的所有其他项目[重复]
【发布时间】:2014-05-20 02:26:56
【问题描述】:

我有一个项目数组,我想做的是某种循环,我将使用该数组中的每个对象并为该数组中的每个其他剩余对象运行一个测试函数。

我不想使用两个相同的对象两次,这意味着如果 A 和 B 被检查 B 和 A 将不会被检查。

假设我有一个 A B C D 数组 现在我想做的是

甲乙

A C

A D

B C

B D

C D

这样就不会有 2 个相同的元素被打印两次。

【问题讨论】:

  • 你能显示一些代码吗?
  • 您的问题似乎令人困惑,但请尝试使用 LINQ 的 Distinct() 方法。
  • 听起来像是一个标准的组合问题。您是否尝试过寻找生成所有组合?有很多 StackOverflow 帖子展示了如何做到这一点。

标签: c# arrays list


【解决方案1】:

这是一个简单的嵌套循环:

int[] myArray = new int[1000];

for (int x = 0; x < myArray.Length; ++x)
{
    for (int y = x+1; y < myArray.Length; ++y)
    {
        // do something with x and y
    }
}

您应该了解,对于大型阵列,这可能需要很长时间。组合数为n*(n-1)/2。因此,如果您的数组包含 1,000 个项目,您将有近 500,000 个组合要检查。

【讨论】:

  • 不,这将使用 x 和 y 两次,因为当 Y 的对象变为 X 时,X 将被使用一次,然后是第二次。
  • @user3025332:你什么意思?对于 3 个项目,这将给出 0,10,21,2。它不会重复一个组合(也就是说,它不会给出1,0,例如)。
  • 这个循环是正确的。尝试自己单步执行,并密切注意 y 的初始化方式。
  • 我已经用一个例子更新了 OP
  • 这个循环完全按照你在 OP 中的操作,即使是按照这个顺序。请尝试一下。
猜你喜欢
  • 2019-11-29
  • 1970-01-01
  • 2015-08-23
  • 1970-01-01
  • 2018-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-24
相关资源
最近更新 更多