检查两个数组中使用的两个对象是否相同

时间:2014-11-12 02:19:22

标签: objective-c arrays if-statement

我有两个阵列,其中包括5张背景为纯色的照片。这是用于将图像放入数组的代码:

self.colorArray = @[
                    [UIImage imageNamed:@"orange_square"],
                    [UIImage imageNamed:@"purple_square"],
                    [UIImage imageNamed:@"red_square"],
                    [UIImage imageNamed:@"blue_square"],
                    [UIImage imageNamed:@"green_square"],
                    ];
self.iconColorArray = @[
                    [UIImage imageNamed:@"orange_icon"],
                    [UIImage imageNamed:@"purple_icon"],
                    [UIImage imageNamed:@"red_icon"],
                    [UIImage imageNamed:@"blue_icon"],
                    [UIImage imageNamed:@"green_icon"],
                    ];

正如您所看到的,图像按照背景颜色分别按顺序排列。 (我为阵列使用不同的图像,因为iconColorArray用于较小的UIImageView

该应用随机更改两个UIImageViews的图像。

我想要的是if-else语句来比较两个数组以查看是否使用了相同的objectAtIndex。 Exp:如果orange_square用于一个UIImageVieworange_icon用于另一个,则if-else语句中的条件将返回true。

基本上回答我的问题,请告诉我如何获取数组中UIImageView使用的对象的索引。

编辑: 使用Matt的建议,我将代码更改为:

NSUInteger d = [self.colorArray indexOfObject:self.squareOne.image];
NSUInteger e = [self.iconColorArray indexOfObject:self.icon.image];

现在,我可以比较它们。

2 个答案:

答案 0 :(得分:0)

您可以创建第三个对象作为字典,其中图像方形名称的名称是键是键。然后你colorArray和iconColorArray可以从这本词典中得到。

self.imageMap = { @"orange_square" : @"orange_icon",
                  @"purple_square" : @"purple_icon" }

- (BOOL)squareUsed:(UIImage *)square isSameAsIcon:(UIImage *)iconUsed {
  for (NSString *key in self.imageMap) {
    if ([[UIImage imageNamed:key] isEqual:square]) {
      if ([UIImage imageNamed:self.imageMap[key]] isEqual:iconUsed]) {
        return YES;
      }
      // We matched the square and the icon didn't match.
      return NO;
    }
  }
  // We never matched the square. Assert?
  return NO;
}

答案 1 :(得分:0)

获取对象索引的方式是(等待它)indexOfObject:

问题在于使用此方法预先假定可以比较此对象的相等性。我不知道UIImage是否会这样做;我很怀疑,但你可以试试。

另一种可能性是indexOfObjectIdenticalTo:;如果图像未被图像视图复制,但可能工作,但它是与图像中图像同一图像的实际参考。

说了这么多,我会做什么?他们都不是。我甚至不会保留图像阵列;它非常浪费内存,你的应用程序可能会在它开始运行之前崩溃。我要做的是保留一组图像的名称;字符串很小,图像很大。为了进行比较,我会将UIImageView子类化为name属性,以便我可以分配名称和图像,现在问题很简单。

或者你甚至可以通过他们自己的视图控制器显示图像,并为视图控制器提供name属性。事实上,我碰巧有这样做的一个例子:

https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch06p311pageController/ch19p626pageController/Pep.swift

事实上,如果你探索该项目的其余部分,你会发现我正在按照你的要求去做:要了解pep boy正在展示什么,我问Pep对象的{{1字符串和我在Pep boy 列表中查找其索引:

https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch06p311pageController/ch19p626pageController/AppDelegate.swift

它在Swift中,所以我使用boy而不是find,但这相同。