我正在寻找 Swift Array
- [NSArray indexOfObject:inRange:]
的替代方案。我正在尝试做的基本上如下:
NSArray *A = @[@1, @3, @5, @4, @3];
NSUInteger cursor = 0;
while (YES) {
NSUInteger res = [A indexOfObject:@3 inRange:NSMakeRange(cursor, A.count - cursor)];
if (res == NSNotFound) {
break;
}
NSLog(@"found 3 at %@", @(res));
cursor = res + 1;
}
但是我似乎找不到一种方法来开始使用 Swift 数组从某个索引开始搜索。当然,我可以制作子数组,但是在 Swift 中是否有更好的方法可以做到这一点?
数组切片是实现此目的的自然方法:
let numbers = [1, 2, 3, 1, 2, 3, 1, 2, 3]
let range = 4...6
let desiredNumber = 2
let indexOfDesiredNumberInRange = numbers[range].index(of: desiredNumber)
print(indexOfDesiredNumberInRange as Any) // => Optional(4)
由于ArraySlice
只是对soruce Array
的相同备份存储的视图,因此不会进行浪费的复制
我假设您正在尝试获取要查找的对象的所有索引。这是一种更好的方法
let arr = [1,2,3,4,3,5,6,7,8]
for (num, index) in test.enumerated() {
if num == 3 {
print("found 3 at (index)")
}
}
为您提供索引的另一种方式:
arr.enumerated().filter { (_, num) -> Bool in
num == 3
}.map { $0.offset }