当我引用数组中的某个项目时,我想找到另一个最接近它且符合特定条件的项目。
例如,我有这个数组:
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
的对象是第一个,因为它们具有相同的 name
、gender
和 address
(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/