#arrays #swift
#массивы #swift
Вопрос:
У меня есть массив объектов. У каждого объекта есть свойство, называемое числом.
struct Age {
var position = 0
}
У меня также есть массив этих объектов:
let age = Age()
let array = [age]
Как я могу добавить к свойству position индекс элемента в массиве.
Что-то вроде:
for i in array {
i.position = i.index
}
По сути, первый элемент массива, который находится в позиции 0, должен сделать i = 0 вторым до 1 и т.д.
Комментарии:
1.
array.indices.forEach { array[$0].position = $0 }
2. Обратите внимание, что если вы добавляете, вставляете или заменяете subrange, это сделает ваше свойство position недействительным в качестве индекса. Я не рекомендую сохранять индекс элемента как свойство вашего структурного элемента
3. Привет, большое вам спасибо. Итак, как вы мне посоветуете это сделать? Мне нужно сохранить индекс элемента как свойство, потому что я сортирую элементы в списке, и мне нужно переупорядочивать их каждый раз, когда элемент удаляется или добавляется.
Ответ №1:
array
должно быть var
, а не let
для того, чтобы быть изменяемым и заставить это работать:
var array = Array(repeating: Age(), count: 10) //build a sample array to test with
for index in 0..<array.count {
array[index].position = index
}
print(array)
Что приводит к следующему:
[StackOverflowPlayground.Age(position: 0),
StackOverflowPlayground.Age(position: 1),
StackOverflowPlayground.Age(position: 2),
StackOverflowPlayground.Age(position: 3),
StackOverflowPlayground.Age(position: 4),
StackOverflowPlayground.Age(position: 5),
StackOverflowPlayground.Age(position: 6),
StackOverflowPlayground.Age(position: 7),
StackOverflowPlayground.Age(position: 8),
StackOverflowPlayground.Age(position: 9)]