Создать NSIndexSet из целочисленного массива в Swift

Я преобразовал NSIndexSet в массив [Int], используя ответ по адресу /questions/24689821/kak-poluchit-indeksyi-iz-nsindexset-v-nsarray-v-kakao/24689850#24689850 Мне нужно сделать по существу обратное, превратив тот же тип массива обратно в NSIndexSet.

5 ответов

Решение

Свифт 3

IndexSet может быть создан непосредственно из литерала массива, используя init(arrayLiteral:), вот так:

let indices: IndexSet = [1, 2, 3]

Оригинальный ответ (Swift 2.2)

Похоже на ответ pbasdf, но использует forEach(_:)

let array = [1,2,3,4,5,7,8,10]

let indexSet = NSMutableIndexSet()
array.forEach(indexSet.add) //Swift 3
//Swift 2.2: array.forEach{indexSet.addIndex($0)}

print(indexSet)

Это будет намного проще в Swift 3:

let array = [1,2,3,4,5,7,8,10]
let indexSet = IndexSet(array)

Вот Это Да!

Свифт 3+

let fromRange = IndexSet(0...10)
let fromArray = IndexSet([1, 2, 3, 5, 8])

Добавил этот ответ, потому что fromRange Вариант еще не был упомянут.

Swift 4.2

Из существующего массива:

let arr = [1, 3, 8]
let indexSet = IndexSet(arr)

Из литерала массива:

let indexSet: IndexSet = [1, 3, 8]

Вы можете использовать NSMutableIndexSet И его addIndex метод:

let array : [Int] = [1,2,3,4,5,7,8,10]
print(array)
let indexSet = NSMutableIndexSet()
for index in array {
    indexSet.addIndex(index)
}
print(indexSet)

Как насчет использования Set<Int> поскольку IndexSet только для чтения (нет возможности добавлять новые элементы)?

var set: Set<Int> = [0]
set.insert(1)
set.insert(2)
return set
Другие вопросы по тегам