2017-03-16 9 views
-5

関数に渡された文字列が、タプルを要素として持つ配列内にあるかどうかを調べる方法を理解しようとしています。以下は私のコードです。私はこれをどのように解決するのがベストかわからない。文字列がタプルの配列の一部であるかどうかを確認する - Swift

typealias myTuple = (input: String, magnitude: Int)  

var userInput = "Happy"        

var wordOneArray: [myTuple] = [] 

var magnitudeCount = 1 

var userInputTuple: myTuple = (userInput, magnitudeCount) 


magnitudeCount += magnitudeCound 

func addUserInput(tempArray: myTuple) {  

    if wordOneArray.contains(userInput) { 

     userInputTuple = (userInput, magnitudeCount += magnitudeCount) 

    } 

    wordOneArray.append(userInputTuple) 

    print(wordOneArray) 


} 

addUserInput(tempArray: userInputTuple) 

userInput = "Sad" 

userInputTuple = (userInput, magnitudeCount) 

addUserInput(tempArray: userInputTuple) 
+0

期待される出力は何ですか?どのようなエラーがありますか? – Hamish

+0

if文の行に「引数がありません」というエラーが発生しました。次の行に '+ ='が生成され、 '()'が生成されます。 –

+0

この情報であなたの質問を編集してください。最初のエラーの理由は、配列が正しいかどうかを直接質問することができないためですあなたはカスタム述語を使う必要があるでしょう(なぜコンパイラが 'contains(where:)'を示唆しているのか)。タプル代入からそれを移動し、代わりに 'magnitudeCount'を代入してください - 例えばhttp://stackoverflow.com/q/36185088/2976878を参照してください – Hamish

答えて

0

まず、あなたのコードがコンパイルされません:/

をいずれにせよ、あなたはタプルは文字列が含まれているかどうかを調べるためにwordOneArray.contains(where: { $0.0 == userInput })を使用することができます。

+0

ありがとうございます。これは配列のすべてのタプルで特定の文字列を検索します?または最初のものだけ? –

+0

配列全体をループします。 ilは一致する文字列を持つタプルを見つけ、そうであれば 'true'を返し、そうでなければ' false'を返します。 –

+0

ok素晴らしい。それはうまくいった。唯一の最後の部分は、見つかったタプル要素の「magnitudeCount」を増やそうとしていることです。私は自分のコードを変更しましたが、正しい出力は得られません。(また、Stackoverflowで私のコードをここに貼り付けることはできません。一致が見つかった場合、magnitudeCountをどのように増やすことができるか、考えてください。 –

関連する問題