2017-05-11 16 views
0

ユーザー入力の文字と辞書の値を一致させたい。ユーザーはテキストフィールドに何かを入力し、入力した文字に関連付けられた単語のグループに変換されます。 たとえば、誰かが "Hello"と入力した場合、その単語の各文字(この場合は5文字)に対して辞書から一致する単語が出力されます。単語 "Hello"の各文字に1つずつ出力されます。Swift:文字列から別の文字を辞書の値と照合する

これは私の辞書(ほんの一部便宜のために、それはアルファベットのすべての文字が含まれている)である:(UITextFieldです)inputFieldから

let dict:[String:String] = ["A":"Awesome", 
          "B":"Bravo", 
          "C":"Cool"] 

、私はのための配列にテキストを変換個々の文字:

let textString = inputField.text 
let arrayOfString = Array(textString.characters) 

私はのためのインループを使用して、私の辞書を反復処理する必要がありますが、私はこれにアプローチするかどうかはわかりません推測しています。配列を使うべきですか?あるいは.charactersでも個々の文字を取得できますか?元の単語の文字として順序を維持するための

+0

マージすることができますhttp://stackoverflow.com/questions/43694617/beginner-swift-converting-string-if-letter-in-dictionary –

答えて

2

:このソリューションは、単に不足している文字スキップしていることを覚えておいてください

let dict:[String:String] = ["A":"Awesome", 
           "B":"Bravo", 
           "C":"Cool"] 
let words = "AbCd".uppercased().characters.flatMap { dict[String($0)] } 
print(words) // ["Awesome", "Bravo"] 

- それはあなたが望むものであるかどうかわからないが

+1

let wordsMatchingUserInput = userInput.lowercased().characters.map { dict[$0] }.flatMap { $0 } 

は次にアップそれらすべてに参加しますmapとflatMapを一緒に使う - 'let words =" AbCd ".uppercased()。characters.flatMap {dict [String($ 0)]}'。 'dict'はおそらく' [Character:String] 'でなければなりません。 – Hamish

+0

これは完璧な、多くの感謝です! – Harold

1

あなた自身にそれを容易にすることができますあなたが単語の最初の文字を前提とした場合に文字列の配列から文字列への文字として辞書を構築することにより、キーのようになります。

import Foundation 

let words = [ 
    "Awesome", 
    "Bravo", 
    "Cool"] 

let dict = words.reduce([Character:String]()) { dict, word in 
    guard let c = word.lowercased().characters.first else { return dict } 
    var mutDict = dict 
    mutDict[c] = word 
    return mutDict 
} 

その後WORを検索dsは辞書のキーと同じ方法でユーザー入力を正規化します(この例では小文字にしています)。あなたが関連

let outputString = wordsMatchingUserInput.joined(separator: " ") 
関連する問題