🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

Q&A

1回答

639閲覧

[swift]キーの重複を排除して配列に格納したい

syosinsya_swift

総合スコア62

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

0グッド

0クリップ

投稿2019/10/16 10:11

前提・実現したいこと

地域コード都道府県名首都
1東京都東京23区
1千葉県千葉市
1神奈川県横浜市
2群馬県前橋市
2栃木県宇都宮市

上記のようなデータがあるとします。
それを地域コードをキーにして都道府県名首都を配列に入れたいのですがやり方が分からず教えてください。

イメージとしては以下のような配列です。
[地域コード:String,[都道府県名:String,首都:String]]

地域コード1であれば、配列[1]に東京都、千葉県、神奈川県の配列を入れるという感じです。
Codableを活用するのが良いのでしょうか。

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

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

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

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

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

guest

回答1

0

せめて課題を単純化して試すぐらいの事はご自分でやりましょう。

swift

1struct Item { 2 /// 地域コード 3 var code: Int 4 /// 都道府県名 5 var city: String 6 /// 首都 7 var capital: String 8} 9 10let items = [ 11 Item(code: 1, city: "東京都", capital: "東京23区"), 12 Item(code: 1, city: "千葉県", capital: "千葉市"), 13 Item(code: 1, city: "神奈川県", capital: "横浜市"), 14 Item(code: 2, city: "群馬県", capital: "前橋市"), 15 Item(code: 2, city: "栃木県", capital: "宇都宮市"), 16] 17 18let result = items.reduce(into: [Int: [Item]]()) { 19 if $0[$1.code] == nil { 20 $0[$1.code] = [] 21 } 22 $0[$1.code]?.append($1) 23} 24 25print(result)

出力結果:

text

1[1: [Test000.Item(code: 1, city: "東京都", capital: "東京23区"), Test000.Item(code: 1, city: "千葉県", capital: "千葉市"), Test000.Item(code: 1, city: "神奈川県", capital: "横浜市")], 2: [Test000.Item(code: 2, city: "群馬県", capital: "前橋市"), Test000.Item(code: 2, city: "栃木県", capital: "宇都宮市")]]

itemsが配列([Item]型)で、resultがcodeをキーとした辞書型に変換したものです([Int: [Item]]型)。
上手い人ならもう少し短く書けるかもしれません。

投稿2019/10/17 06:41

takabosoft

総合スコア8356

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

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

syosinsya_swift

2019/10/17 07:24

ありがとうございます!reduceという関数を初めて知りました。 回答いただく前は、for文で回していました。。 重ねてですみませんが、[Int: [Item]]型の部分、例えば複数キーで辞書型にすることは可能でしょうか。 調べてもでてこなかったので教えていただけるとありがたいです。
takabosoft

2019/10/17 07:47

> for文で回していました そのコードは載せるべきですし、解決しているのでしたら質問そのものが不要という事になります。 > 重ねてですみませんが、[Int: [Item]]型の部分、例えば複数キーで辞書型にすることは可能でしょうか。 Swift標準の辞書型のキーは一つです。 ただ、状況や目的によって新たな回答が得られる可能性はありますので、 単純化したサンプルコードと試したコードを一緒にして質問を立ててください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問