Realm Swift - Поиск по идентификаторам - PullRequest
0 голосов
/ 10 апреля 2020

Мне нужно запросить объекты Realm, используя список идентификаторов, id является первичным ключом объекта. Я пробовал следующее:

// Query a list of Dogs by their _ids
let doggoIds = ["1", "2", "3", "1", "2"]
realm.objects(Dog.self).filter("_id IN %@", doggoIds)
// Result: [Dog1, Dog2, Dog3]

Список идентификаторов содержит дубликаты, но, как вы можете видеть, результатом является список уникальных объектов Dog.

Мне интересно, может ли кто-нибудь придумать другой способ написания этого запроса, чтобы мы получили хорошую коллекцию Results<Dog> из этого списка идентификаторов, которая содержит дубликаты. Спасибо!

Ответы [ 2 ]

2 голосов
/ 12 апреля 2020

Результаты области содержат уникальные объекты, поэтому самое простое решение - запросить каждую собаку и добавить результат в массив. CompactMap делает это хорошо, поскольку отфильтровывает ноль.

let listOfDogsToFind = ["Fido", "Dino", "Sport", "Fido", "Cupid"]

let dogArray = listOfDogsToFind.compactMap { dogName -> DogClass? in
    if let result = realm.objects(DogClass.self).filter("dog_name == %@", dogName).first {
        return result
    }
    return nil
}

for dog in dogArray {
    print("dog name: \(dog.dog_name)")
}

Предположим, что Купидон не существует, вот вывод

dog name: Fido
dog name: Dino
dog name: Sport
dog name: Fido
1 голос
/ 10 апреля 2020

Realm.objects().filter возвращает список «живых», управляемых объектов. Он не будет возвращать дубликаты, поскольку существует только один объект, соответствующий первичному ключу. Чтобы выполнить sh того, что вы хотите, вам нужно создать «неуправляемый» дубликат каждого объекта и сделать свой собственный массив из этих неуправляемых объектов , сопоставить каждый возвращенный экземпляр с вашим собственным массивом.

A la:

let doggoIds = [1, 2, 3, 1, 2]
    for managedMuttId in doggoIds {
        if let managedMutt = realm.object(ofType: Dog.self, forPrimaryKey: managedMuttId) {
            // unmanaged.append(Dog(value: managedMutt))
            duplicateList.append(managedMutt)
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...