2015-08-02 32 views
14

Tôi muốn sử dụng các giá trị từ một từ điển trong UITableViewCells của mình. Tôi có thể lấy chúng từ một từ điển bằng cách sử dụng indexPath.row cho giá trị và indexPath.section cho khóa không?Swift: truy cập từ điển qua chỉ số

Trả lời

43

bạn có thể nhận mảng phím và lấy chìa khóa tại indexPath.section như thế này:

Array(yourDictionary.keys)[indexPath.section] 

và bạn có thể nhận được giá trị tại indexPath.row từ mảng các giá trị như thế này:

Array(yourDictionary.values)[indexPath.row] 

Chỉnh sửa:

nếu bạn muốn nhận các giá trị của khóa phần cụ thể mà bạn nên viết:

let key = Array(yourDictionary.keys)[indexPath.section] 
let array = yourDictionary[key] 
let value = array[indexPath.row] 
+0

Cảm ơn! Tôi quên đề cập đến, xin lỗi, rằng từ điển tôi đang nói về trông như thế này: [String: [AnyObject]]() Vì vậy, tôi có nhiều đối tượng cho mỗi khóa. Có thể có một mảng cho các giá trị của một khóa cụ thể không? – Vincent

+0

@Vincent có chắc chắn, tôi sẽ cập nhật câu trả lời của tôi. – Firas

+0

Cảm ơn! Điều này đã làm việc! – Vincent

7

Từ điển vốn không có thứ tự. Nếu bạn sử dụng dictionary.keys, bạn có thể nhận được một mảng các khóa và sử dụng khóa đó, như @Firas nói trong câu trả lời của mình, nhưng không có gì đảm bảo rằng lần tiếp theo bạn tìm nạp một dãy các khóa, chúng sẽ theo cùng một thứ tự.

Một tùy chọn khác sẽ là sử dụng Int làm loại khóa, sau đó sử dụng indexPath.row làm khóa.

Thực sự tốt hơn khi sử dụng mảng làm nguồn dữ liệu cho chế độ xem bảng.

Nếu bạn muốn lưu trữ các giá trị cho dạng xem bảng được phân đoạn trong từ điển, bạn nên sử dụng mảng phần ngoài, chứa mảng hàng bên trong, chứa từ điển giá trị cho ô.

0

Đây là mẹo nhỏ của tôi để truy cập Từ điển theo chỉ mục. Chỉ cần bọc từ điển!

var dict = [String: [Int]]() 

dict.updateValue([1, 2, 3], forKey: "firstKey") 
dict.updateValue([3, 4, 5], forKey: "secondKey") 

var keyIndex = ["firstKey": "firstKey", "secondKey": "secondKey"] 
var arr = [[String: [Int]]]() 

for (key, value) in dict { 
    arr.append([keyIndex[key]!: value]) 
} 

print(arr[0]) // ["firstKey": [1, 2, 3]] 
Các vấn đề liên quan