Swift массив получить новый индекс элемента после фильтрации - PullRequest
0 голосов
/ 07 июня 2018

Предположим, у меня есть этот массив:

let a = [0, -1, 2, -3, 4, -5, 6]

, и мой любимый номер равен 4 (index = 4).

Теперь массив фильтрует отрицательное число, как этот

let b = a.filter { $0 >= 0 } // [0, 2, 4, 6]

И мое любимое число (4) теперь имеет индекс = 2.

Я имею в виду, как узнать его по коду (мой любимый индекс 2 сейчас) элегантным способом?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

просто сохраните значение и используйте index(of:), чтобы найти новый индекс

let v = a[4]
let newIndex = a.filter { $0 >= 0 }.index(of:v)
0 голосов
/ 07 июня 2018

Подсчитайте, сколько элементов, предшествующих вашему «фавориту», не были отброшены.Это новый индекс вашего фаворита:

let a = [0, -1, 2, -3, 4, -5, 6]
let aFavoriteIndex = 4

let b = a.filter({ $0 >= 0 })
let bFavoriteIndex = a.prefix(aFavoriteIndex).filter({ $0 >= 0 }).count
b[bFavoriteIndex] // 4
...