如何比较NSArray中的每对元素?

时间:2014-08-10 00:48:13

标签: ios objective-c nsarray

我的NSArray仅填充NSStrings

我理解为迭代NSArray个n个元素,我所要做的就是使用for (NSString *element in arrayOfElements)。但是,我想知道是否有特定的函数将执行数组中的每个字符串元素之间的比较。例如,如果我有数组:

[@" apple",@" banana",@" peach",@" kiwi"],

我将如何进行比较,以便将苹果与香蕉,桃子和猕猴桃进行比较;然后香蕉对抗桃子和维基,最后桃子对抗奇异果?

3 个答案:

答案 0 :(得分:4)

尝试使用嵌套的for循环,例如:

for (int i = 0 ; i < array.count ; i ++) {
    for (int j = i + 1 ; j < array.count ; j ++) {
        // compare array[i] to array [j]
    }
}

编辑:虽然wottle的建议可行,但在这种情况下,我建议使用我的建议,因为它不会浪费多次迭代进行相同的比较。通过设置j = i + 1,我在此算法中所做的只是将数组中的每个元素与之后的元素进行比较。

答案 1 :(得分:2)

给定&#34;数组不会有任何重复,并且每个NSString都是唯一的&#34;对于使用NSSet类而不是NSArray来说,这听起来很棒。 NSMutableSet提供:

  

minusSet:

     

从接收中移除另一个给定集合中的每个对象   设置,如果存在。

  

intersectSet:

     

从接收集中删除不是a的每个对象   另一个给定集合的成员。

我不确定您正在寻找哪种操作,但听起来其中一项操作应该涵盖您的确切用例。

答案 2 :(得分:1)

你要做的事情远远超出了自定义比较器的意图。通常,如果您有一个列表并且想要运行自定义比较器,那么您可以对列表进行排序。当列表中的某些项目与其他项目相比时,您似乎想要执行某些特定操作,为此,我认为循环中的循环是您最好的选择。它的性能不是很好,所以希望你不要期待一个大阵列:

-(void) compareArrayToSelf
{
    NSArray *array=@[@"apple", @"bananna", @"peach", @"kiwi"];

    for( NSString *value1 in array)
    {
        for( NSString *value2 in array)
        {
            if( ![value1 isEqualToString:value2] && [self compareArrayValue:value1 toOtherValue:value2])
            {
                //Do something with either value1 or value2
            }
        }
    }

}