ある問題に挑戦していて、なかなか回答方法が思いつきません。
どうかアドバイスよろしくお願いいたします。
問題
「人」と「人の血液型」、「血液型」と「血液型に対応するラッキーカラー」が入力されるので、それぞれの人に対応するラッキーカラーを表示したいです。
例)
n(入力される数)
(ユーザー_1) (ユーザー_1の血液型)
(ユーザー_2) (ユーザー_2の血液型)
(ユーザー_3) (ユーザー_3の血液型)
m(入力される数)
(血液型_1) (血液型_1のラッキーカラー結果)
(血液型_2) (血液型_2のラッキーカラー結果)
(血液型_3) (血液型_3のラッキーカラー結果)
1から n までの人について順に、その人とそのラッキーカラーを半角スペース区切りで出力したいです。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
3
yuu B
taro O
kai AB
3
B green
O blue
AB yellow
出力
yuu green
taro blue
kai yellow
このような出力結果にしたいです。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
途中経過
swift
1 2let n = Int(readLine()!)! 3var users : [String:String] = [:] 4 5for _ in 0..<n{ 6let tmp = readLine()!.split(separator: " ") 7let user = String(tmp[0]) 8let blood = String(tmp[1]) 9users[user] = blood 10} 11 12let m = Int(readLine()!)! 13var fortunes : [String:String] = [:] 14 15for _ in 0..<m{ 16let tmp = readLine()!.split(separator: " ") 17let blood = String(tmp[0]) 18let fortune = String(tmp[1]) 19fortunes[blood] = fortune 20} 21 22for (user,user_blood) in users{ 23for (blood,fortune) in fortunes{ 24if user_blood == blood{ 25print("(user) (fortune)") 26break 27} 28} 29}
なんとかペアで出力することはできましたが、辞書型なので順番通りに出力ができずに悩んでいます。
KeyValuePairs と定義すれば順番が保持されると分かったのですが、var users : KeyValuePairs = [:]
としてもうまくいきませんでした。
ご回答よろしくお願いいたします。
アドバイスをいただき解決しました。
let n = Int(readLine()!)! var hb = [(String,String)]()//ユーザー名と血液型をタプルで格納する配列 var bf = [(String,String)]()//血液型と占い結果をタプルで格納する配列 for _ in 0..<n{ let tmp = readLine()!.split(separator: " ") let user = String(tmp[0]) let blood = String(tmp[1]) hb.append((user,blood)) } let m = Int(readLine()!)! for _ in 0..<m{ let tmp = readLine()!.split(separator: " ") let blood = String(tmp[0]) let fortune = String(tmp[1]) bf.append((blood,fortune)) } for i in hb{ for ii in bf{ if i.1 == ii.0{ print("(i.0) (ii.1)") } } }
回答1件
あなたの回答
tips
プレビュー