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

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

ただいまの
回答率

90.75%

  • Swift

    6685questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 161

例えば

var a = [
   "apple": 100
]

print (a["apple"] ?? 0)


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

var a = [
   "apple": 100
]

func getKey() {
    for (key, value) in a {
        print (key)
    }
}

getKey()


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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+3

.keysで取れます。

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

 valueからkey取得

let a = [
   "apple": 100,
   "orange": 200,
   "banana": 100,
]
print(Array(a.filter {$0.value == 100}.keys))
//=> ["banana", "apple"]

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/01 17:38

    なるほどありがとうございます!

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

    キャンセル

  • 2018/06/01 18:00 編集

    回答に追記しました。

    キャンセル

  • 2018/06/01 18:18 編集

    追加質問への答えを探して見ました。
    https://qiita.com/Saayaman/items/e82a09f93bb91409e446

    こちらの「Valueを探してKeyを取得する」というところに記載があります。
    試してないですが、

    理論的にはkeysとvaluesを別々に取得し、
    それぞれ新たなArrayを作成する。
    その検索しているValueとの一致をforで繰り返して探し、その順番を取得。
    その番号を用い、keysのその順番の値を引っ張ってくる
    でできるはずです。

    すでに答え出てましたね。
    スッキリ1行で関心です。もっと勉強します(^_^;)

    キャンセル

  • 2018/06/01 18:25 編集

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

    キャンセル

  • 2018/06/01 18:58

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

    キャンセル

  • 2018/06/01 19:02

    >>hameji
    わざわざ探していただきありがとうごまいます
    そのサイトも見たのは見たんですがあまりはっきりとしないので選択肢から外してしまいました
    ただそれ以上の情報がたくさんしれたのですごく感謝しています

    >>fuzzball
    たしかにパフォーマンスという面ではあまりやらないほうがいい処理なのかもしれません、、、、
    ただ自分の中の突っかかりが消えたのでまた勉強に精進できそうです!ありがとうございます!

    キャンセル

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

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    swift ScaleAspectFill

    画像の表示形式について質問です。 現在ImageViewの領域いっぱいに画像を表示させたくて、 ScaleAspectFillを指定しているのですが、 画像の上側をはみ出ない

  • 解決済

    Seift 値の取得

    var members = ["東京":"Tokyo","大阪":"Osaka","京都":"Kyoto"] と辞書があるときに、キーから値を取るなら let name = m

  • 解決済

    Swift: UITextFieldの数値変換

    UITextField で受け取ったものを数値に変換するにはどうすればいいですか? Xcodeのバージョンは8です。

  • 解決済

    UIButton not working

    現在 UIViewControllerの上に、 let collectionView = UICollectionView() let collectionViewCell

  • 受付中

    カメラアクセスと写真のアップロードができない

    作ったアプリでカメラアクセスと写真のアップロードができません。 Xcodeから自分のiPhoneでエミュレータを起動したのですが Camera access ボタンとPhoto

  • 解決済

    Swift 配列をprintする際に要素数で改行してprintするやり方

    配列をprintする際に、ある要素数で改行して表示するやり方がわかりません。 let a = [0,2,3,1,2,3,2,5,26,23,...] という配列を3個刻みで改

  • 解決済

    Expected ',' separatorのエラーが表示されるが解決方法が分からない

     前提・実現したいこと Swiftの勉強を初めたばかりの初心者です。 Codebelleというiphoneアプリケーションで配列を使ったループ処理を勉強(6-5) しております。教

  • 解決済

    DoubleからStringへの変換

     行いたいこと Double型を使用して計算し、String型で表示したいです。  発生している問題・エラーメッセージ 小さい数字なら大丈夫なんですが、大きい数字の計算になると

同じタグがついた質問を見る

  • Swift

    6685questions

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