当我有对数组中某个项的引用时,我希望找到与它最接近的、符合特定条件的另一个项。
例如,我有一个数组:

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")

上面的距离方法只是一个例子,你必须调整它
为了你的需要。

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

10-08 22:27
查看更多