尝试访问 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)
我正在使用 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)