Objective c 目标C,为什么这些NSARRARY不匹配?

Objective c 目标C,为什么这些NSARRARY不匹配?,objective-c,comparison,nsarray,Objective C,Comparison,Nsarray,我正在比较两个nsarray——在NSLog输出中,它们看起来相同,但不知何故它们并不相等。如果我将NSArray转换为NSString,我会得到相同的精确结果。将他们与自己进行比较将是平等的。我如何确定为什么一和二不相等?多谢各位 - (void)confused:(NSArray *)two { NSArray *one = [NSArray arrayWithObjects:@"16777223", @"7", nil]; NSArray *two = [[NSBundl

我正在比较两个nsarray——在NSLog输出中,它们看起来相同,但不知何故它们并不相等。如果我将NSArray转换为NSString,我会得到相同的精确结果。将他们与自己进行比较将是平等的。我如何确定为什么一和二不相等?多谢各位

- (void)confused:(NSArray *)two {

    NSArray *one = [NSArray arrayWithObjects:@"16777223", @"7", nil];
    NSArray *two = [[NSBundle bundleWithPath:@"/path/to/bundle"] executableArchitectures];

    // NSArray "two" shows as 16277223, 7 in NSLog

    if ([two firstObjectCommonWithArray:(NSArray *)one])
    {
        NSLog(@"- it's equal %@ %@", one, two);
        // if array one matches array two then this will output
    }
    else {
        NSLog(@"- it's NOT equal %@ %@", one, two);
    }

    return;
}
以下是console的输出:

myApp (
    16777223,
    7
)
myApp (
    16777223,
    7
)
myApp - it's NOT equal (
    16777223,
    7
)(
    16777223,
    7
)

-[NSBundle executablearchitecture]
返回一个由
NSNumber
对象组成的数组,而不是
NSString
对象,因此您传递的数组中没有字符串。如果你改变

NSArray *one = [NSArray arrayWithObjects:@"16777223",@"7", nil];


您的代码应该可以工作。

-[NSBundle executablearchitecture]
返回一个包含
NSNumber
对象的数组,而不是
NSString
对象,因此您传递的数组中没有字符串。如果你改变

NSArray *one = [NSArray arrayWithObjects:@"16777223",@"7", nil];



你的代码应该可以工作。

你能包括创建两个
吗?这与我的另一个问题直接相关
“[[NSBundle bundleWithPath:@”/path/to/bundle“]executablearchitecture]”
;因此,上述示例中NSArray one的值将是
@“16777223”、@“7”、nil
Oh。该方法返回的数组是
NSNumber
,而不是
NSString
。这就是你的问题。是的,如果对象类型不同,即使它们产生相同的
描述
转储,它们也不可能进行相同的比较。好的,我已经用NSArray 2是如何创建的更新了这个问题。因此,问题实际上是如何表示NSArray one,使其等于2?能否包括创建
two
?它与我的另一个问题
“[[NSBundle bundleWithPath:@”/path/to/bundle“]executableArchitectures]”直接相关。
;因此,上述示例中NSArray one的值将是
@“16777223”、@“7”、nil
Oh。该方法返回的数组是
NSNumber
,而不是
NSString
。这就是你的问题。是的,如果对象类型不同,即使它们产生相同的
描述
转储,它们也不可能进行相同的比较。好的,我已经用NSArray 2是如何创建的更新了这个问题。所以真正的问题是如何表示NSArray 1,使其等于2?哇,那么mach-o部分是内置的吗?我不知道,很酷。我现在就去试试——谢谢!你的意思是
NSBundleExecutableArchitectureX86\u 64
?这些只是您导入的名称。它们是在NSBundle.h中定义的,就在声明
executableArchitectures
的正上方。当您像这样使用
枚举中的值时,最好使用它们的名称而不是值来引用它们——这样可以提高可读性并防止可能的值更改(尽管可能性不大).
=
比较
NSArray
对象在内存中的位置;这些肯定是不平等的
firstObjectCommonWithArray:
[一个相等:两个]
应该都能工作。不是吗?
firstObjectCommonWithArray:
返回数组中相同的第一个对象,它不用于相等性检查。哇,所以mach-o部件是内置的?我不知道,很酷。我现在就去试试——谢谢!你的意思是
NSBundleExecutableArchitectureX86\u 64
?这些只是您导入的名称。它们是在NSBundle.h中定义的,就在声明
executableArchitectures
的正上方。当您像这样使用
枚举中的值时,最好使用它们的名称而不是值来引用它们——这样可以提高可读性并防止可能的值更改(尽管可能性不大).
=
比较
NSArray
对象在内存中的位置;这些肯定是不平等的
firstObjectCommonWithArray:
[一个相等:两个]
应该都能工作。不是吗?
firstObjectCommonWithArray:
返回数组中相同的第一个对象,它不用于相等性检查。