【发布时间】:2018-01-02 19:18:58
【问题描述】:
我目前在二维数组中按字母顺序排序我的数据时遇到了一个大问题。我将尽力为您提供每一个细节,以使其尽可能清晰。
目前,我正在使用 CNContactStore 获取我的联系人。这一切都很好。我能够从我的联系人中检索我想要的所有数据。
现在,我创建了以下结构:
struct FavoritableContact {
let contact: CNContact
var hasFavorited: Bool
}
有了这个,我声明并初始化了以下数组:
var favoritableContacts = [FavoritableContact]()
一旦我检索到我的联系人,我只需将它们附加到 favouritableContacts;
try store.enumerateContacts(with: request, usingBlock: { (contact, stopPointerIfYouWantToStopEnumerating) in
favoritableContacts.append(FavoritableContact(contact: contact, hasFavorited: false))
})
要在同一个数组中按字母顺序对它们进行排序,我只需执行以下操作:
var sortedContacts = favoritableContacts.sorted { $0.contact.familyName < $1.contact.familyName }
现在,如果可能,我想创建以下二维数组,
var 2D = [
[FavoritableContact] //"A"
[FavoritableContact], //"B"
[FavoritableContact], //"C"
[FavoritableContact], //"D"
...
]
我只是不确定如何获取我的 sortedContacts 数组并按字母顺序分隔。
我是新来的,如果我忘记了什么,或者我做的不对,请告诉我。
【问题讨论】:
-
与其拥有像上面创建的二维数组那样的数组,不如创建一个字典来保存按字母顺序排列的联系人更有意义。因此,创建一个字典,其中键是字母(“a”、“b”、“c”等),值是按字母顺序排序的 FavoritableContact 数组。您可以通过循环访问您的联系人并检查 familyName 的第一个字母来创建此字典。
-
这就是我想做的事情。但我期待将联系人放在表格视图中。因此,我会使用 section 和 row 来遍历 2D 数组并将其显示在 tableview 上。
-
您仍然可以使用字典作为 tableView 的数据源。您可以简单地使用带有字母的数组来保持字母的有序列表,并且在您的 tableView 方法中,您可以获得键“A”的数组计数,例如,了解有多少“A”与您联系有,等等。
-
tableview 的数据源不必是数组。事实上,字典是 tableview 集合的一个非常常见的数据源。在您的情况下,我假设这些部分将是第一个字母(A-Z),而行将是作为值存储在您的字典中的数组。如果键不存在,则部分将为空。