web-dev-qa-db-ja.com

Swift:インデックス経由の辞書アクセス

UITableViewCellsで辞書の値を使用したい。値にindexPath.rowを使用し、キーにindexPath.sectionを使用して、辞書からこれらを取得できますか?

15
Vincent

次のようにキー配列を取得し、indexPath.sectionでキーを取得できます。

Array(yourDictionary.keys)[indexPath.section]

次のように、values配列からindexPath.rowの値を取得できます。

Array(yourDictionary.values)[indexPath.row]

編集:

特定のセクションキーの値を取得する場合は、次のように記述する必要があります。

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

辞書は本質的に順序付けられていません。 dictionary.keysを使用する場合、キーの配列を取得して使用することができます(@Firasの回答で述べています)が、次にキーの配列をフェッチしたときに同じ順序になるという保証はありません。

もう1つのオプションは、Intをキータイプとして使用し、次にindexPath.rowをキーとして使用することです。

テーブルビューのデータソースとして配列を使用することは本当に良い方法です。

セクション化されたテーブルビューの値をディクショナリに格納する場合は、セルの値のディクショナリを含む内部行配列を含む外部セクション配列を使用する必要があります。

7
Duncan C

インデックスで辞書にアクセスするための小さなトリックを次に示します。辞書をラップするだけです!

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]]
0
Changnam Hong