【问题标题】:How to compare various NSArrays in Objective-c?如何比较 Objective-c 中的各种 NSArray?
【发布时间】:2015-03-09 06:05:24
【问题描述】:

我的代码包含四个NSArrays,每个都包含两个对象,它们代表屏幕上任意点的XY坐标。两个或多个数组可能包含同一组坐标。我需要找到这四个数组中重复次数最多的坐标。在这种情况下,isEqualTo: 方法可以提供帮助吗?

【问题讨论】:

    标签: ios objective-c nsarray


    【解决方案1】:

    一种方法是维护一个NSDictionary,将数组中的坐标用作键,然后为每个坐标(即键)维护一个计数器,每当您看到相同的坐标时就递增该计数器。

    这可能看起来像这样:

    NSMutableDictionary *coordinateCount = [[NSMutableDictionary alloc] init];
    for (int i = 0; i < coordinates.length; i++) { // do this loop for each of your 4 arrays
       Coordinate *c = coordinates[i];
       if ([coordinateCount containsKey:c]) {
          NSInteger count = [coordinateCount[c] integerValue];
          count++;
          coordinateCount[c] = @(count);
       }
       else {
          coordinateCount[c] = @(1);
       }
    }
    
    // now you can retrieve the max count value from all collected values
    

    请注意,此代码未经测试,必须根据您的类型和变量名称进行调整。

    【讨论】:

    • NSCountedSet 可以用更少的代码实现相同的功能,例如NSCountedSet *coordinateCount = [NSCountedSet setWithArray:coordinates].
    • 哦,不错,是的,NSCountedSet 看起来是个不错的选择……至少你保存了初始化数组中计数的代码
    • 更准确地说,在我的算法中,四个数组分别预测任何坐标,我需要根据这些预测来决定一个坐标。例如:当所有数组或其中至少三个包含相同的坐标时,我可以返回这个数组。但是,如果前两个数组预测一个坐标,后两个预测下一个坐标,那么我应该分别返回坐标的 X 部分和 Y 部分的平均值。如何使用目标 C 解决它? @nburk
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多