【问题标题】:Check against every unique pair of objects in an NSArray检查 NSArray 中每一对唯一的对象
【发布时间】:2013-08-28 08:26:04
【问题描述】:

我有一个数字数组。我需要将数组中的每个数字与数组中的每个其他数字进行比较,而不需要任何重复的比较集。例如,需要比较索引 0 和 1 处的对象,但不想稍后通过检查索引 1 和 0 处的对象来加倍。

谁能帮我解决这个问题。将不胜感激。

【问题讨论】:

  • 如果你说出原因,你甚至可能得到更好的解决方案。

标签: iphone ios objective-c macos ipad


【解决方案1】:

我不知道你需要做什么,因为可能有更好的方法来完成你想要做的任何事情,但对于你所说的情况,你可以做一个简单的:

for (int n=0;n<[array count];n++) {
    for (int m=n+1;m<[array count];m++) {
        //check your array based on objects at index n and m;
    }
}

这只是从头到尾循环遍历数组,并且对于每个对象循环遍历它之后的每个对象,您可以比较它们或做任何事情。从n+1 而不是0 开始内部循环可防止您重复比较。

【讨论】:

  • 这基本上就是我的做法,除非出于性能原因我必须找出更好的方法。 (但请注意,第一个循环可以比您更早地停止一次迭代。)当然,您可以将第二个循环索引向上 n-1,从 1 开始第一个循环。
  • 第一个循环可以少一点,我几乎添加了一个-1,但为简单起见,这样做几乎没有性能损失,因为在外部循环的最后一次迭代中,内部循环将立即退出。
  • 是的,我同意在大多数情况下差异可以忽略不计。
【解决方案2】:

如果它有助于解决您的问题,请使用 NSMutableOrderedSet。或另一个可变数组,并使用containsObject: 将原始数组中的对象一个一个添加到其中,以测试您要插入的对象是否是重复的。

【讨论】:

    【解决方案3】:

    您可以遍历数组并在每个数字处仅将其与数组中的下一个数字进行比较。 如果您有大小为 5 的数组,则在 arr[2] 将其与 arr[3]、arr[4] 进行比较。

    伪代码:

    NSArray *arr;
    for(int i = 0; i < arr.count ; i++)
    {
      NSNumber *num1 = [arr objectAtIndex:i];
      for(int j = i + 1; j < arr.count; j++)
         {
           NSNumber *num2 = [arr objectAtIndex:j];
           //compare here num1 with num2
         }
     }
    

    【讨论】:

    • 不清楚为什么这被否决了,因为它与 Jsdodgers 基本相同。
    • 是的,我不知道,给我留下了深刻的印象,我多次修改我的答案,以发现他们为什么投票反对我!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多