2017-03-02 15 views
-1

私は現在スウィフトドキュメントでこれを参照しています:反復処理し、辞書の配列を変異させるスウィフト3

let wordArray = ["Man","Child","Woman","Dog","Rat","Goose"] 
var arrayOfMutatingDictionaries = [[String:Int]]() 

var count = 0 

while count < 6 
{ 
    arrayOfMutatingDictionaries.append([wordArray[count]:1]) 
    count += 1 
} 
:私は動的辞書の配列を作成するときに、しかし

You can also iterate over a dictionary to access its key-value pairs. Each item in the dictionary is returned as a (key, value) tuple when the dictionary is iterated, and you can decompose the (key, value) tuple’s members as explicitly named constants for use within the body of the for-in loop. Here, the dictionary’s keys are decomposed into a constant called animalName, and the dictionary’s values are decomposed into a constant called legCount.

let numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]

for (animalName, legCount) in numberOfLegs {

print("\(animalName)s have \(legCount) legs") } 

// ants have 6 legs // spiders have 8 legs // cats have 4 legs

は、そのコードは機能しませんそれが必要として

は、上記のルーチンが成功し、辞書の配列を作成しますが、私はそれを反復処理しようとすると、ドキュメントが表示さのように:

for (wordText, wordCounter) in arrayOfMutatingDictionaries 

私はエラーを取得する:式タイプ[[文字列:int]は]私は全然ことを理解していない多くの文脈

ずに曖昧です。

ここでの目標は、可変ディクショナリの可変配列を持つことです。プログラムの途中で、新しいKey-Valueペアを追加したいが、必要に応じて値を増やすこともできます。私はこのコレクションタイプに結婚していませんが、それはうまくいくと思いました。

アイデア?

+1

'arrayOfMutatingDictionaries'は*配列*であり、ディクショナリではありませんので、' for dict in arrayOfMutatingDictionaries {...} 'を使って繰り返します。 - あなたが何を期待していたかわからない。 –

+0

私はvarとして配列を宣言していると予想していましたが、それは変更可能ですが、上記のコードパターンを使用すると不可能です。 'for Dict for arrayOfMutatingDictionaries'を介して反復することによって、辞書の値を変更することはできません。これは私がしたいことです。 –

答えて

2

辞書のように扱う配列を反復しようとしています。 あなたは、配列を反復処理する必要がありますしてから、キー/値のペアを通じて

for dictionary in arrayOfMutatingDictionaries{ 
    for (key,value) in dictionary{ 
     //Do your stuff 
    } 
} 

は、キー/値のペアは非常に簡単です追加します。あなたも、この

for i in 0..<arrayOfMutatingDictionaries.count{ 
    for (key,value) in arrayOfMutatingDictionaries[i]{ 
     arrayOfMutatingDictionaries[i][key] = value+1 
    } 
} 
1
let wordArray = ["Man","Child","Woman","Dog","Rat","Goose"] 
var arrayOfMutatingDictionaries = [[String : Int]]() 

var count = 0 

while count < 6 { 
    arrayOfMutatingDictionaries.append([wordArray[count] : 1]) 
    count += 1 
} 

for dictionary in arrayOfMutatingDictionaries { // You missed this out! 
    for (word, num) in dictionary { 
    print(word, num) 
    } 
} 
+0

これは、グースの辞書をテストする場合を除いて役に立ちます - 'if word ==" Goose "{num + = 1}"エラーが発生しました**突然変異演算子の左側は可変ではなく、numはlet定数。** –

0

のような既存の値をインクリメントすることができます

for i in 0..< arrayOfMutatingDictionaries.count{ 
    arrayOfMutatingDictionaries[i][yourkey] = yourvalue 
} 

はこれを試してみてください。そしてあなたはあなたの期待される結果を得るでしょう。

let wordArray = ["Man","Child","Woman","Dog","Rat","Goose"] 
var arrayOfMutatingDictionaries = [String]() 
//Here you are doing mistake in above line. You are creating an array of dictionary ([[String:Int]]) in your code. And you are iterating an array of string (wordArray) 

var count = 0 

while count < 6 
{ 
    arrayOfMutatingDictionaries.append(wordArray[count]) 
    count += 1 
} 

for (wordText) in arrayOfMutatingDictionaries 
{ 
    print(wordText) 
} 
関連する問題