Попытка получить доступ к некоторым элементам в IndexSet
Я использую IndexSet
и я пытаюсь получить доступ к некоторым индексам, которые иногда являются последовательными, а в других - нет.
Например, мой набор может содержать [1, 2, 3, 5, 6, 7, 13, 31]
Я хочу вытащить из набора целый ряд 3...13
, но у меня проблемы с синтаксисом. Я узнал, как использовать команды функций из документации Apple, используя myIndexSet.sorted()
, Тем не менее, документация Apple не дает пример того, как получить доступ к ряду элементов в наборе. Документация Apple по доступу к элементам в наборе индексов:
subscript(Range<IndexSet.Index>)
Я попробовал несколько способов написать это, но не могу понять, как это сделать правильно. Может кто-нибудь показать мне, как получить доступ к ряду элементов в наборе, чтобы создать новый набор? Я пробовал такие вещи, как:
let subset = subscript(Range: myLargerSet.3...13)
но это не похоже на работу.
Спасибо
3 ответа
То, что вы ищете, это пересечение вашего IndexSet
([1, 2, 3, 5, 6, 7, 13, 31]
) с другим IndexSet
([3, 4, ..., 12, 13]
):
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]
Вы можете получить доступ к фрагменту вашего оригинального набора следующим образом:
let slice = indexSet[indexSet.indexRange(in: 3...13)]
slice
получает доступ к существующим элементам на месте, поэтому создание среза O(1)
Одним из возможных решений является использование фильтра для создания нового IndexSet
,
let set = IndexSet(arrayLiteral: 1,2,3,5,6,7,13,31)
let subset = set.filteredIndexSet { (index) -> Bool in
index >= 3 && index <= 13
}