2015-09-21 11 views

答えて

15
func findKeyForValue(value: String, dictionary: [String: [String]]) ->String? 
{ 
    for (key, array) in dictionary 
    { 
     if (array.contains(value)) 
     { 
      return key 
     } 
    } 

    return nil 
} 

呼ぶ上記機能オプションのStringを返しますか?

let drinks = ["Soft Drinks": ["Cocoa-Cola", "Mountain Dew", "Sprite"], 
     "Juice" :["Orange", "Apple", "Grape"]] 

print(self.findKeyForValue("Orange", dictionary: drinks)) 

この関数は、渡された値を持つ配列の最初のキーのみを返します。

+0

仕事は私の問題を解決しました。ありがとうございました。 – Statik

+1

複数のキーがあっても最初のキーのみを返します。 – zaph

+0

FUNC findKeysForValue(値:文字列、辞書:[文字列:[文字列]]) - > [文字列] { VARキー= [文字列]() (キー、アレイ)のための辞書 { に(アレイ場合。ヘルプは(値)) { keys.append(キー) }} リターンキー } – abintom

2

すべての辞書エントリを列挙し、各値リストで目的の値をテストし、値が存在するキーを累積します。

let drinks = [ 
    "Soft Drinks": ["Orange", "Cocoa-Cola", "Mountain Dew", "Sprite"], 
    "Juice" :["Apple", "Grape"] 
] 

let value = "Orange" 

var keys = [String]() 
for (key, list) in drinks { 
    if (list.contains(value)) { 
     keys.append(key) 
    } 
} 

print("keys: \(keys)") 

キー:

例は、リスト中の所望の値を含むすべての飲み物を見つけ[ "ソフトドリンク"]

8

Swift 2.0では、辞書をフィルタリングし、その結果を配列にマップできます。

let keys = drinks.filter { 
    return $0.1.contains("Orange") 
}.map { 
    return $0.0 
} 

結果は、マッチングキーを表すStringオブジェクトの配列であろう。

+1

動作します。返り値は、値が一致していても不明瞭なすべてのキーを返します。 – zaph

+0

"Cryptic"はフィルターとマップが高次関数であると考えると厳しい言葉です。構文は最近は古くなっていますが、それについては –

-2

この(SWIFT)を試してみてください。

(dic as NSDictionary).allKeysForObject(<#T##anObject: AnyObject##AnyObject#>) 

それは私のため

+0

(NSDictionaryとして飲みます).allKeysForObject( "Orange")は空の配列を返します。要求に応じて "Juice"は返しません。ところで、それは質問に書かれています。出版の前に、あなたの答えを遊び場などで確認してください。 – user3441734

+0

リラックスマン。私は、他の人が同様の質問をするのを助けるための一般的なテンプレートを書いています。私はパラメータを書きません。あなたは私の答えにあまりにも多くを読んでいる –

関連する問題