我想知道是否可以在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。
答案 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:
。