ios - 在 UITableView 中从 [(key : String, value: [[String : Any]])] 分配键和值

标签 ios arrays swift uitableview dictionary

我有一个字典数组,[[String:AnyObject]],它被成功地归约+排序如下。

 var arrUserList = [(key: String, value: [[String : Any]])]()


 let result = self.arrJsonDict.reduce(into: [String: [[String:Any]]]()) { result, element in
                    let strName: String = (element as! NSDictionary).value(forKey: "name") as! String
                    if let firstLetter = strName.first {
                        let initial = String(describing: firstLetter).uppercased()
                        result[initial, default: [[String:Any]]() ].append(element as! [String : Any])
                    }}.sorted { return $0.key < $1.key }


     self.arrUserList = result

现在我想将键分配给表部分,并将值分配为数组中的表单元格文本。

最佳答案

这是非常繁琐的代码。

强烈建议您至少对成员 name 使用结构而不是字典

struct Person {
    let name : String
} 

声明并重命名arrJsonDic(更具描述性)为

var people : [Person]()

arrUserList作为

var users = [String: [Person]]()

为sections声明另一个数组

var letters = [String]()

将数组分组并简单地填充 letters

users = Dictionary(grouping: people, by: { String($0.name.first!) })
letters = users.keys.sorted()

numberOfSections 的 TableView 中返回

return letters.count

并在 numberOfRows 中返回

let letter = letters[section]
return users[letter]!.count

cellForRowAt 中为标签分配一个名称

let letter = letters[indexPath.section]
let user = users[letter]![indexPath.row]
cell.nameLabel.text = user.name

--------------------------------

为了让它仍然更快速声明第二个结构Section

struct Section {
    let index : String
    let people : [Person]
}

删除

var letters = [String]()

并声明用户

var users = [Section]()

分组略有不同

let grouped = Dictionary(grouping: people, by: { String($0.name.first!) })
users = grouped.map({ Section(index: $0.0, people: $0.1) }).sorted{$0.index < $1.index}

三个 TableView 委托(delegate)方法中的代码分别是

return users.count

-

return users[section].people.count

-

let user = users[indexPath.section].people[indexPath.row]
cell.nameLabel.text = user.name

关于ios - 在 UITableView 中从 [(key : String, value: [[String : Any]])] 分配键和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54254992/

相关文章:

iOS9:是否允许 NSAllowsArbitraryLoads=True 在 App Store 中发布?

ios - 在 RxSwift 中使用 stub 提供程序进行注册验证的 XcTest 案例

java - 循环数组问题的双端队列实现

ios - 使用 Swift 保存和加载高分

swift - 如何在 uialertview swift 3 中添加 uipickerview

ios - UIBarButtonItem 高亮选择器?

c - 在循环中使用 2 个变量对数组求和(并运行循环 N/2 次)比仅使用一个变量的运行时间更快。为什么?

c - 将数组结构写入文件

SWIFT URL 字符串构建

iphone - Xcode 5、iOS7 和 64 位与 32 位