比较对象和编辑数组

时间:2016-07-07 20:17:43

标签: ios swift

我想通过特定属性创建唯一元素的数组。

前:

我有对象数组(Person):

struct Person {
    var name: String?
    var secondName: String?

    init (name: String, secondName: String) {

        self.name = name
        self.secondName = secondName
    }
}

let person1 = Person(name: "name1", secondName: "secondName1")
let person2 = Person(name: "name2", secondName: "secondName2")
let person3 = Person(name: "name1", secondName: "secondName3")

let personsArray = [person1, person2, person3]

我想获得一个新数组,它将包含具有唯一名称的人物对象

类似这样的$ 0.name == $ 1.name

实现这一目标的最佳方法是什么?

结果应该是具有唯一名称的对象数组param = [[person1,person3],[person2]]

2 个答案:

答案 0 :(得分:1)

这是我个人解释的问题

给定一个Person(s)数组,您需要输出多个词典,其中键是一个人的名字,而值是一个人员列表那个名字。

这是代码

let dict = persons.reduce([String:[Person]]()) { (dict, person) -> [String:[Person]] in
    var dict = dict
    dict[person.name] = (dict[person.name] ?? []) + [person]
    return dict
}

答案 1 :(得分:1)

一种方法:您可以将它们逐个添加到字典中,其中“name”是键(考虑使用小写),“数组人员”是值。完成后,keys数组将包含所有唯一的“name”值,每个键的值将是具有该“name”的Persons数组。然后,您可以通过删除任何具有小于2的数组的键来“修剪”您的字典。

替代方法:按“名称”对数组进行排序,然后您可以轻松删除任何未出现两次的内容(如果某个元素与其中一个邻居不匹配,则将其删除)。