質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

2747閲覧

SwiftのDictionary型でkeyを取り出す方法

reijimatsumura

総合スコア16

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/06/01 07:28

編集2018/06/01 07:35

例えば

Swift

1var a = [ 2 "apple": 100 3] 4 5print (a["apple"] ?? 0)

これでvalueを取り出すのはわかるんですが、keyの取得方法がいまいちわかりません

swift

1var a = [ 2 "apple": 100 3] 4 5func getKey() { 6 for (key, value) in a { 7 print (key) 8 } 9} 10 11getKey()

これで取得することはできましたがすこし冗長すぎるかと。。。
どのようにすればよいのでしょうか?
versionは4.1です

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

.keysで取れます。

swift

1let a = [ 2 "apple": 100, 3 "orange": 200, 4] 5print(Array(a.keys)) //=> ["apple", "orange"] 6print(a.keys.map {$0}) //=> ["apple", "orange"]

valueからkey取得

swift

1let a = [ 2 "apple": 100, 3 "orange": 200, 4 "banana": 100, 5] 6print(Array(a.filter {$0.value == 100}.keys)) 7//=> ["banana", "apple"]

投稿2018/06/01 08:04

編集2018/06/01 08:57
fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

reijimatsumura

2018/06/01 08:38

なるほどありがとうございます! ただもう少し詳しい質問をすると keyを参照してvalueを取り出す方法はわかるのですがその逆、 valueを参照してkeyを取り出す方法というのはあるんでしょうか? 例えば上のコードを例に出すとappleを参照すると100は取れるわけですが100を参照してappleを取り出す方法はないんでしょうか? ややこしくて申し訳ないです
fuzzball

2018/06/01 09:37 編集

回答に追記しました。
hameji

2018/06/01 09:24 編集

追加質問への答えを探して見ました。 https://qiita.com/Saayaman/items/e82a09f93bb91409e446 こちらの「Valueを探してKeyを取得する」というところに記載があります。 試してないですが、 理論的にはkeysとvaluesを別々に取得し、 それぞれ新たなArrayを作成する。 その検索しているValueとの一致をforで繰り返して探し、その順番を取得。 その番号を用い、keysのその順番の値を引っ張ってくる でできるはずです。 すでに答え出てましたね。 スッキリ1行で関心です。もっと勉強します(^_^;)
fuzzball

2018/06/01 09:46 編集

>>hamejiさん それも思いついたのですが、keysとvaluesの順序が同じ(対になっている)という確証が無かったのでやめました。(たぶん同じなんでしょうけど)
MasakiHori

2018/06/01 09:58

hamejiさんのリンク先のものは同じValueを持つペアが複数あった場合の動作が不定なのでやめましょう。 不定というのはfuzzballさんの例示の辞書を値100でキーを探した場合、appleが返ってくるかbananaが返ってくるかが定まっていないということです。 Swiftのバージョンが変わったり、ひどい場合は実行のたびに返ってくるものが変わる可能性があります。
reijimatsumura

2018/06/01 10:02

>>hameji わざわざ探していただきありがとうごまいます そのサイトも見たのは見たんですがあまりはっきりとしないので選択肢から外してしまいました ただそれ以上の情報がたくさんしれたのですごく感謝しています >>fuzzball たしかにパフォーマンスという面ではあまりやらないほうがいい処理なのかもしれません、、、、 ただ自分の中の突っかかりが消えたのでまた勉強に精進できそうです!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問