Objective-C 数组索引换行

Objective-C Array Index Wrap

我想知道是否可以在 Objective-C

中包装一个数组

示例:

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

abcdefghijklmnopqrstuvwxyz

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

我希望能够得到 say 30objectAtIndex,但是它 returns beyond bounds(可以理解)。

NSString *letter = [characters objectAtIndex:30];

我想要环绕的数组。例如,30objectAtIndex 到 return d,第 4 个字符,因为它从最后一个字符换行到第一个字符。

这是我的代码中的特定行:

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

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

非常感谢您抽出宝贵时间。有任何疑问请询问。

詹姆斯中午。

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

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

不过可能更好:

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

您可以为 NSArray 创建一个类别并为 objectAtIndex: 添加您自己的方法,该方法采用索引并找到数组长度的模数,然后 returns 对象在那个指数。每当给定索引大于数组长度或数组长度为 0 时添加日志也会有帮助。

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

你只需要一对括号:

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