尝试访问 IndexSet 中的某些元素

Trying to access some elements in an IndexSet

我正在使用 IndexSet 并且我正在尝试访问一些有时是连续的有时不是连续的索引。

例如,我的集合可能包含 [1, 2, 3, 5, 6, 7, 13, 31]

我想从集合中提取 3...13 的范围,但语法有问题。我通过 myIndexSet.sorted() 学习了如何使用 Apple 文档中的函数命令。但是,Apple 文档没有给出如何访问集合中一系列元素的示例。用于访问索引集中元素的 Apple 文档如下:

subscript(Range<IndexSet.Index>)

我试过很多方法来写这篇文章,但不知道如何正确地写。有人可以告诉我如何访问集合中的一系列元素来创建新集合吗?我已经尝试过诸如:

let subset = subscript(Range: myLargerSet.3...13)

不过好像不行。

谢谢

您要查找的是您的 IndexSet ([1, 2, 3, 5, 6, 7, 13, 31]) 与另一个 IndexSet ([3, 4, ..., 12, 13]) 的 intersection:

let yourIndexSet: IndexSet = [1, 2, 3, 5, 6, 7, 13, 31]
let desiredIndexRange = IndexSet(3...13)
let indicesOfInterest = yourIndexSet.intersection(desiredIndexRange)
print(indicesOfInterest.sorted()) // => [3, 5, 6, 7, 13]

一种可能的解决方案是使用过滤器创建新的 IndexSet

let set = IndexSet(arrayLiteral: 1,2,3,5,6,7,13,31)
let subset = set.filteredIndexSet { (index) -> Bool in
    index >= 3 && index <= 13
}

您可以按如下方式访问原始集的一部分:

let slice = indexSet[indexSet.indexRange(in: 3...13)]

slice 访问现有的元素,所以切片的创建是 O(1)