Поиск и добавление индекса массива к фактическому элементу внутри массива

#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)]