【发布时间】:2013-08-28 08:26:04
【问题描述】:
我有一个数字数组。我需要将数组中的每个数字与数组中的每个其他数字进行比较,而不需要任何重复的比较集。例如,需要比较索引 0 和 1 处的对象,但不想稍后通过检查索引 1 和 0 处的对象来加倍。
谁能帮我解决这个问题。将不胜感激。
【问题讨论】:
-
如果你说出原因,你甚至可能得到更好的解决方案。
标签: iphone ios objective-c macos ipad
我有一个数字数组。我需要将数组中的每个数字与数组中的每个其他数字进行比较,而不需要任何重复的比较集。例如,需要比较索引 0 和 1 处的对象,但不想稍后通过检查索引 1 和 0 处的对象来加倍。
谁能帮我解决这个问题。将不胜感激。
【问题讨论】:
标签: iphone ios objective-c macos ipad
我不知道你需要做什么,因为可能有更好的方法来完成你想要做的任何事情,但对于你所说的情况,你可以做一个简单的:
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 开始内部循环可防止您重复比较。
【讨论】:
-1,但为简单起见,这样做几乎没有性能损失,因为在外部循环的最后一次迭代中,内部循环将立即退出。
如果它有助于解决您的问题,请使用 NSMutableOrderedSet。或另一个可变数组,并使用containsObject: 将原始数组中的对象一个一个添加到其中,以测试您要插入的对象是否是重复的。
【讨论】:
您可以遍历数组并在每个数字处仅将其与数组中的下一个数字进行比较。 如果您有大小为 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
}
}
【讨论】: