Swift: получить индексы массива объектов, отфильтрованных по определенному свойству - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть массив пользовательских объектов, имеющих значения ID в качестве свойств. Теперь у меня есть другой массив выбранных объектов (выбранных по идентификаторам). Как я могу получить индексы первого массива путем фильтрации по выбранным идентификаторам (второй массив)?

Я бы хотел избежать зацикливания и думать о решении, использующем compactMap или подобное.

struct MyObject {
    var ID: Int
    var name: String
}

let myObjects = [
    MyObject(ID: 3, name: "AAAA"),
    MyObject(ID: 5, name: "BBBB"),
    MyObject(ID: 12, name: "CCCC"),
    MyObject(ID: 15, name: "DDDD"),
    MyObject(ID: 20, name: "EEEE"),
    MyObject(ID: 21, name: "GGGG"),
    MyObject(ID: 22, name: "HHHH"),
    MyObject(ID: 23, name: "IIII"),
]
let selectedIds = [5, 20, 23]

// How to get an array of indices for selectedIds
// Expected result [1, 4, 7]

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

Вы можете отфильтровать indices

let selectedIndices = myObjects.indices.filter{selectedIds.contains(myObjects[$0].ID)}
1 голос
/ 05 февраля 2020
myObjects.enumerated()   // Pair-up elements and their offsets
    .filter { selectedIds.contains($0.element.ID) }  // Get the ones you want
    .map { $0.offset }  // Extract the offsets
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...