arrays - 在对象数组中找到最近的项目?

标签 arrays swift filter

当我引用数组中的某个项目时,我想找到另一个最接近它且符合特定条件的项目。

例如,我有这个数组:

struct Person {
    var name = ""
    var age = ""
    var gender = ""
    var address = ""
}

let array = [Person(name:"ahmad",age:"22",gender:"male",address:"USA"),
             Person(name:"ahmad",age:"23",gender:"male",address:"KSA")]

现在假设我有一个对象:

let object = Person(name:"ahmad",age:"25",gender:"male",address:"USA")

基于此,我需要根据其所有属性的值在 array 上找到最接近它的人。

例如,根据我上面的代码,array 中最接近 object 的对象是第一个,因为它们具有相同的 namegenderaddress(3 个匹配的属性),而不是第二个,因为只有 2 个匹配的属性。

最佳答案

首先你必须定义一个函数来衡量“接近度” 两个人。根据您的示例,可能是

struct Person {
    let name: String
    let age: String
    let gender: String
    let address: String

    // Compute a number measuring the “closeness” to another person,
    // with smaller numbers meaning “closer”.
    // For example: the number of non-matching properties.
    func distance(to other: Person) -> Int {
        return (name == other.name ? 0 : 1)
            + (age == other.age ? 0 : 1)
            + (gender == other.gender ? 0 : 1)
            + (address == other.address ? 0 : 1)
    }
}

然后可以使用 min(by:) 确定最接近的人:

let object = Person(name:"ahmad", age:"25", gender:"male", address:"USA")
let closest = array.min(by: { $0.distance(to: object) < $1.distance(to: object) })!

print(closest) // Person(name: "ahmad", age: "22", gender: "male", address: "USA")

上面的distance方法只是一个例子,你要自行调整 满足您的确切需求。

关于arrays - 在对象数组中找到最近的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49728657/

相关文章:

javascript - 为什么将空数组作为参数传递给 .reduce?

ios - Realm swift : Can't get an object from realm

ios - 在iOS中,如何检测UITableview中的单元格是否正在被滑动?

c - 如何在C中将数组拆分为两个数组

javascript - 如何动态地从对象中提取所有元素

ios - SpriteKit - 使某些 SpriteNodes 在不禁用其物理体的情况下不会发生碰撞

c# - 模糊而不是锐化

带有静态资源的 Grails 过滤器?

iphone - UIImage 的宝丽来滤镜

c - 垂直直方图阵列打印问题