领域 Swift - 按 ID 查找
Realm Swift - Find by IDs
我需要使用 id 列表查询 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]
id 列表包含重复项,但如您所见,结果是一个唯一的 Dog 对象列表。
我想知道是否有人可以想出一种不同的方式来编写此查询,以便我们从包含重复项的 ID 列表中获得一个很好的 Results<Dog>
集合。谢谢!
Realm.objects().filter
return 是 "live" 托管对象的列表。它不会 return 重复,因为只有一个对象匹配主键。为了完成你想要的,你需要为每个对象创建一个'unmanaged'副本,并制作你自己的那些非托管对象的数组映射每个return将实例编辑到您自己的数组中。
阿拉:
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)
}
}
Realm 结果包含独特的对象,因此最简单的解决方案是查询每只狗并将结果添加到数组中。 CompactMap 做得很好,因为它过滤掉了 nil。
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
我需要使用 id 列表查询 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]
id 列表包含重复项,但如您所见,结果是一个唯一的 Dog 对象列表。
我想知道是否有人可以想出一种不同的方式来编写此查询,以便我们从包含重复项的 ID 列表中获得一个很好的 Results<Dog>
集合。谢谢!
Realm.objects().filter
return 是 "live" 托管对象的列表。它不会 return 重复,因为只有一个对象匹配主键。为了完成你想要的,你需要为每个对象创建一个'unmanaged'副本,并制作你自己的那些非托管对象的数组映射每个return将实例编辑到您自己的数组中。
阿拉:
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)
}
}
Realm 结果包含独特的对象,因此最简单的解决方案是查询每只狗并将结果添加到数组中。 CompactMap 做得很好,因为它过滤掉了 nil。
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