personal_logsテーブルの"macaddr"カラムにMACアドレスが格納、"data"カラムに個人情報がハッシュとして格納されています
dataカラムには下記のような形の値が格納されております
{"uid":"xxxxxx","email":"xxx@xxx","phone":"xxx-xxxx-xxxx"}
ここで問題があり、"macaddr"カラムと"data"カラムには一部重複したものもあります
そこでユニークかつマージされたものにしたいです
MACアドレスがKey、dataがValuになっているハッシュに格納されている配列を下記のようなものにしたとします
(ただし、下記は指摘をうけ、正しくない形となっています)
ruby
1[{"32:5A:3D:87:21:AA" =>"{"uid":"dfasdfas","email":"apple@gmail.com"}", 2 "32:5A:3D:87:21:AA" =>"{"uid":"kdjfasdf","email":"apple@gmail.com"}", 3 "32:5A:3D:87:21:AA" =>"{"email":"bunana@gmail.com","phone":"080-4345-xx23"}", 4 "43:76:4A:DD:2C:BB" =>"{"uid":"dfjaskdi","email":"orenge@gamil.com","phone":"090-4649-77xx"}", 5 "43:76:4A:DD:2C:BB" =>"{"phone":"090-4649-77xx","email":"remon@gamil.com"}", 6 ........."":"{}"}]
dataにはKeyとして'uid''email''phone'が入っています
上記の配列で、MACアドレスがユニーク、dataがユニークかつマージされた配列に変更したいです。
下記のような形にしたいです
[{"32:5A:3D:87:21:AA" =>"{"uid":"dfasdfas,kdjfasdf","email":"apple@gmail.com,bunana@gmail.com","phone":"080-4345-xx23"}", "43:76:4A:DD:2C:BB" =>"{"uid":"dfjaskdi","email":"orenge@gamil.com,remon@gmail.com","phone":"090-4649-77xx"}", ........."":"{}"}]
結果的に、私は上記のようなユニークかつマージされた形にしたく思っています
rails:5.2.0
ruby:2.5.1
###回答を受けて追記
回答のコードをrails console上で実行したところ下記エラーになってしました、、、
ruby
1a = Array.new 2sample = PersonalLog.all 3sample.find_each do |x| 4 hash = Hash.new 5 hash[x.macaddr] = x.decrypted_data 6 a.push(hash) 7end 8 9# aの中身を一部抜粋 10# a = [{"70:DD:23"=>"{\"uid\":\"6729661\",\"email\":\"orenge@gmail.com\"}"}, 11# {"70:E7:AA"=>"{\"uid\":\"3014134\"}"}, 12# {"00:18"=>"{\"uid\":\"1040\"}"}, 13# ,,,,,{"DD:23:32"=>"{\"email\":\"apple@docomo.ne.jp\"}"}] 14 15 16irb(main):009:0> new_data = a.each_with_object(Hash.new{|h, k|h[k] = Hash.new}){|it, memo| 17irb(main):010:1* it.each{|mac, val| 18irb(main):011:2* memo[mac].merge!(val){|_,s,o| s + ',' + o} 19irb(main):012:2> } 20irb(main):013:1> } 21Traceback (most recent call last): 22 7: from (irb):9 23 6: from (irb):9:in `each_with_object' 24 5: from (irb):9:in `each' 25 4: from (irb):10:in `block in irb_binding' 26 3: from (irb):10:in `each' 27 2: from (irb):11:in `block (2 levels) in irb_binding' 28 1: from (irb):11:in `merge!' 29TypeError (no implicit conversion of String into Hash)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/06 08:26
2018/08/06 08:42
2018/08/06 08:46
2018/08/06 09:02 編集
2018/08/06 09:06 編集
2018/08/07 02:55 編集
2018/08/07 05:03 編集