当我有对数组中某个项的引用时,我希望找到与它最接近的、符合特定条件的另一个项。
例如,我有一个数组:
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")
上面的距离方法只是一个例子,你必须调整它
为了你的需要。
关于arrays - 查找对象数组中最接近的项目?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49728657/