在 Swift Array 中查找一个多次具有相同对象的对象



我正在寻找 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 }

最新更新