【问题标题】:Compare every object of an array with every other object将数组的每个对象与其他所有对象进行比较
【发布时间】:2011-11-12 16:53:46
【问题描述】:

我正在尝试像这样创建 if 语句:

if ([[records objectAtIndex:ANYPAGE] valueForKey: @"marbles"] intValue] == 
    [[[records objectAtIndex:ANYPAGE] valueForKey:@"marblesneeded"] intValue]) 
{
    // Some Code Goes Here. . .
}

我希望能够一次检查数组的所有条目中的“弹珠”和“需要的弹珠”是否相同。我怎样才能做到这一点?

【问题讨论】:

  • 什么是记录? NSDictionary 条目的数组? “一次数组的所有条目”是什么意思 - 请更详细地说。

标签: objective-c ios cocoa-touch comparison nsarray


【解决方案1】:

试试这样的 -

NSArray * marblesArray = [records valueForKey: @"marbles"];
NSArray * marblesNeededArray = [records valueForKey: @"marblesneeded"];

if([marblesArray isEqualToArray:marblesNeededArray]){
// do something
}

【讨论】:

  • 这可能行得通,但也可能行不通。由于数组中的对象必须响应 isEqual: 方法。此外,如果对象具有 marblesmarblesneeded 以外的其他字段,则这些字段也必须相等,否则,即使感兴趣的两个字段始终相等,此代码也可能不起作用。因此,这只有在记录数组中的数据结构服从某些约束时才有效。
  • @simonpie...在这一点上我不同意你的看法——另外,如果对象有其他字段而不是弹珠和需要弹珠,那么这些字段也必须相等。
  • @simonpie ...我在这里做的是从记录数组中制作两个不同的数组并比较它们..所以需要担心你指定的情况。
  • @miraaj... 然后我很困惑你为什么不同意。这个问题只想比较两个给定的字段并对其采取行动。现在,如果即使一个元素的其他字段都不相等,但该元素的 marbles 和 marblesneeded 相等,则您建议的代码将分支到 else 子句。据我了解,它不等同于所要求的。除非我没有正确理解你的代码。
  • 对不起,我错过了你的代码。这将起作用。我读得很快,没有看到你正在创建的两个 NSArray。
【解决方案2】:

您可以编写的任何代码都会像这样直接或间接地循环遍历数组:

BOOL allEqual = True;
    for(int i=0; i< [records count] ; i++){
        if ([[records objectAtIndex: i] valueForKey: @"marbles"] intValue] != [[[records objectAtIndex: i]          valueForKey:@"marblesneeded"] intValue]) {
            allEqual = False;
            break;
        }
    }
//do what ever using allEqual

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多