Objective-C数组索引包装

时间:2015-11-26 11:19:31

标签: objective-c arrays xcode7

我想知道是否可以在Objective-C中包装一个数组

示例:

我有一个名为characters的数组,其中包含字母:

abcdefghijklmnopqrstuvwxyz

作为字母表,它只包含26个字符。

我希望能够得到objectAtIndex 30,但它会返回beyond bounds(可以理解)。

NSString *letter = [characters objectAtIndex:30];

我想要的是包围的数组。例如,objectAtIndex 30返回d,第四个字符从最后一个字符包裹到第一个字符。

以下是我的代码中的具体行:

NSString *encoded = [characters objectAtIndex:[characters indexOfObject:chars] + keyNumber % [characters count]];

变量会根据其他实例而变化,因此objectAtIndex会有所不同。

谢谢你的时间,非常感谢。有任何问题请询问。

James Noon。

3 个答案:

答案 0 :(得分:2)

您只需要一对括号:

[characters objectAtIndex:([characters indexOfObject:chars] + keyNumber) % characters.count];

答案 1 :(得分:1)

通常使用模运算符完成包装:

NSString *letter = characters[index % 26];
//                                  ^

但更好的可能是:

NSString *characters = @"abcdefghijklmnopqrstuvwxyz";
unichar letter = [characters characterAtIndex:index % 26];

答案 2 :(得分:1)

您可以为NSArray创建一个类别,并为objectAtIndex:添加自己的方法,该方法获取索引并找到数组长度的模数,然后返回该索引处的对象。每当给定索引大于数组长度时添加日志也会有所帮助,或者当数组的长度为0时也是如此。

但是,我建议在该类别中创建一个单独的方法,仅用于查找包装的索引并将其称为objectAtWrappedIndex: