のキーを取得します。スウィフト辞書は、私のように定義された辞書を持っている値
let key = (drinks as NSDictionary).allKeysForObject("Orange") as! String
print(key)
//Returns an empty Array. Should return "Juice"
のキーを取得します。スウィフト辞書は、私のように定義された辞書を持っている値
let key = (drinks as NSDictionary).allKeysForObject("Orange") as! String
print(key)
//Returns an empty Array. Should return "Juice"
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))
この関数は、渡された値を持つ配列の最初のキーのみを返します。
すべての辞書エントリを列挙し、各値リストで目的の値をテストし、値が存在するキーを累積します。
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)")
キー:
例は、リスト中の所望の値を含むすべての飲み物を見つけ[ "ソフトドリンク"]
Swift 2.0では、辞書をフィルタリングし、その結果を配列にマップできます。
let keys = drinks.filter {
return $0.1.contains("Orange")
}.map {
return $0.0
}
結果は、マッチングキーを表すString
オブジェクトの配列であろう。
動作します。返り値は、値が一致していても不明瞭なすべてのキーを返します。 – zaph
"Cryptic"はフィルターとマップが高次関数であると考えると厳しい言葉です。構文は最近は古くなっていますが、それについては –
この(SWIFT)を試してみてください。
(dic as NSDictionary).allKeysForObject(<#T##anObject: AnyObject##AnyObject#>)
それは私のため
(NSDictionaryとして飲みます).allKeysForObject( "Orange")は空の配列を返します。要求に応じて "Juice"は返しません。ところで、それは質問に書かれています。出版の前に、あなたの答えを遊び場などで確認してください。 – user3441734
リラックスマン。私は、他の人が同様の質問をするのを助けるための一般的なテンプレートを書いています。私はパラメータを書きません。あなたは私の答えにあまりにも多くを読んでいる –
仕事は私の問題を解決しました。ありがとうございました。 – Statik
複数のキーがあっても最初のキーのみを返します。 – zaph
FUNC findKeysForValue(値:文字列、辞書:[文字列:[文字列]]) - > [文字列] { VARキー= [文字列]() (キー、アレイ)のための辞書 { に(アレイ場合。ヘルプは(値)) { keys.append(キー) }} リターンキー } – abintom