質問編集履歴

10

追記

2018/08/07 02:54

投稿

kozica
kozica

スコア58

test CHANGED
File without changes
test CHANGED
@@ -88,6 +88,18 @@
88
88
 
89
89
 
90
90
 
91
+ # aの中身を一部抜粋
92
+
93
+ # a = [{"70:DD:23"=>"{\"uid\":\"6729661\",\"email\":\"orenge@gmail.com\"}"},
94
+
95
+ # {"70:E7:AA"=>"{\"uid\":\"3014134\"}"},
96
+
97
+ # {"00:18"=>"{\"uid\":\"1040\"}"},
98
+
99
+ # ,,,,,{"DD:23:32"=>"{\"email\":\"apple@docomo.ne.jp\"}"}]
100
+
101
+
102
+
91
103
 
92
104
 
93
105
  irb(main):009:0> new_data = a.each_with_object(Hash.new{|h, k|h[k] = Hash.new}){|it, memo|

9

追記

2018/08/07 02:54

投稿

kozica
kozica

スコア58

test CHANGED
File without changes
test CHANGED
@@ -72,6 +72,24 @@
72
72
 
73
73
  ```ruby
74
74
 
75
+ a = Array.new
76
+
77
+ sample = PersonalLog.all
78
+
79
+ sample.find_each do |x|
80
+
81
+ hash = Hash.new
82
+
83
+ hash[x.macaddr] = x.decrypted_data
84
+
85
+ a.push(hash)
86
+
87
+ end
88
+
89
+
90
+
91
+
92
+
75
93
  irb(main):009:0> new_data = a.each_with_object(Hash.new{|h, k|h[k] = Hash.new}){|it, memo|
76
94
 
77
95
  irb(main):010:1* it.each{|mac, val|

8

追記

2018/08/07 02:38

投稿

kozica
kozica

スコア58

test CHANGED
File without changes
test CHANGED
@@ -63,3 +63,41 @@
63
63
  rails:5.2.0
64
64
 
65
65
  ruby:2.5.1
66
+
67
+
68
+
69
+ ###回答を受けて追記
70
+
71
+ 回答のコードをrails console上で実行したところ下記エラーになってしました、、、
72
+
73
+ ```ruby
74
+
75
+ irb(main):009:0> new_data = a.each_with_object(Hash.new{|h, k|h[k] = Hash.new}){|it, memo|
76
+
77
+ irb(main):010:1* it.each{|mac, val|
78
+
79
+ irb(main):011:2* memo[mac].merge!(val){|_,s,o| s + ',' + o}
80
+
81
+ irb(main):012:2> }
82
+
83
+ irb(main):013:1> }
84
+
85
+ Traceback (most recent call last):
86
+
87
+ 7: from (irb):9
88
+
89
+ 6: from (irb):9:in `each_with_object'
90
+
91
+ 5: from (irb):9:in `each'
92
+
93
+ 4: from (irb):10:in `block in irb_binding'
94
+
95
+ 3: from (irb):10:in `each'
96
+
97
+ 2: from (irb):11:in `block (2 levels) in irb_binding'
98
+
99
+ 1: from (irb):11:in `merge!'
100
+
101
+ TypeError (no implicit conversion of String into Hash)
102
+
103
+ ```

7

修正

2018/08/07 02:35

投稿

kozica
kozica

スコア58

test CHANGED
@@ -1 +1 @@
1
- 配列中のハッシュをユニークマージしたい
1
+ Railsでテーブルカラム値をユニークかつマージしたい
test CHANGED
@@ -1,32 +1,22 @@
1
- personal_logsテーブル"macaddr"カラムにMACアドレスが格納、"data"カラムに個人情報がハッシュとして格納されています
1
+ personal_logsテーブル"macaddr"カラムにMACアドレスが格納、"data"カラムに個人情報がハッシュとして格納されています
2
2
 
3
- ただ、ここには一部重複したももあります
3
+ dataカラムには下記ような形の値が格納されております
4
+
5
+ {"uid":"xxxxxx","email":"xxx@xxx","phone":"xxx-xxxx-xxxx"}
6
+
7
+
8
+
9
+ ここで問題があり、"macaddr"カラムと"data"カラムには一部重複したものもあります
4
10
 
5
11
  そこでユニークかつマージされたものにしたいです
6
12
 
7
13
 
8
14
 
9
- そこで私がまずしようとしたことはMACアドレスをKey、dataをValuにしたハッシュの配列を作ろうとしました
10
-
11
- ```ruby
12
-
13
- sample = PersonalLog.all
14
-
15
- sample.each do |x|
16
-
17
- h.[x.macaddr]=x.data
18
-
19
- a.push(h)
20
-
21
- end
22
-
23
- ```
24
-
25
- 上記で下記の配列ができると思っていましたが、指摘されてこれではエラーが出るようです
26
15
 
27
16
 
17
+ MACアドレスがKey、dataがValuになっているハッシュに格納されている配列を下記のようなものにしたとします
28
18
 
29
- MACアドレスがKeydataがValuになっているハッシュが格納されている配列が下記のよなっています
19
+ (ただし、下記は指摘をけ、正しくい形となっています
30
20
 
31
21
 
32
22
 
@@ -66,7 +56,7 @@
66
56
 
67
57
 
68
58
 
69
- ともかく、私は上記のような形にしたく思っています
59
+ 結果的に、私は上記のようなユニークかつマージされた形にしたく思っています
70
60
 
71
61
 
72
62
 

6

修正

2018/08/06 08:05

投稿

kozica
kozica

スコア58

test CHANGED
File without changes
test CHANGED
@@ -67,3 +67,9 @@
67
67
 
68
68
 
69
69
  ともかく、私は上記のような形にしたく思っています
70
+
71
+
72
+
73
+ rails:5.2.0
74
+
75
+ ruby:2.5.1

5

修正

2018/08/06 07:28

投稿

kozica
kozica

スコア58

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,31 @@
1
+ personal_logsテーブルに"macaddr"カラムにMACアドレスが格納、"data"カラムに個人情報がハッシュとして格納されています
2
+
3
+ ただ、ここには一部重複したものもあります
4
+
5
+ そこでユニークかつマージされたものにしたいです
6
+
7
+
8
+
9
+ そこで私がまずしようとしたことはMACアドレスをKey、dataをValuにしたハッシュの配列を作ろうとしました
10
+
11
+ ```ruby
12
+
13
+ sample = PersonalLog.all
14
+
15
+ sample.each do |x|
16
+
17
+ h.[x.macaddr]=x.data
18
+
19
+ a.push(h)
20
+
21
+ end
22
+
23
+ ```
24
+
25
+ 上記で下記の配列ができると思っていましたが、指摘されてこれではエラーが出るようです
26
+
27
+
28
+
1
29
  MACアドレスがKey、dataがValuになっているハッシュが格納されている配列が下記のようになっています
2
30
 
3
31
 
@@ -35,3 +63,7 @@
35
63
  ........."":"{}"}]
36
64
 
37
65
  ```
66
+
67
+
68
+
69
+ ともかく、私は上記のような形にしたく思っています

4

修正

2018/08/06 07:27

投稿

kozica
kozica

スコア58

test CHANGED
File without changes
test CHANGED
@@ -4,15 +4,15 @@
4
4
 
5
5
  ```ruby
6
6
 
7
- [{"32:5A:3D:87:21:AA" :"{"uid":"dfasdfas","email":"apple@gmail.com"}",
7
+ [{"32:5A:3D:87:21:AA" =>"{"uid":"dfasdfas","email":"apple@gmail.com"}",
8
8
 
9
- "32:5A:3D:87:21:AA" :"{"uid":"kdjfasdf","email":"apple@gmail.com"}",
9
+ "32:5A:3D:87:21:AA" =>"{"uid":"kdjfasdf","email":"apple@gmail.com"}",
10
10
 
11
- "32:5A:3D:87:21:AA" :"{"email":"bunana@gmail.com","phone":"080-4345-xx23"}",
11
+ "32:5A:3D:87:21:AA" =>"{"email":"bunana@gmail.com","phone":"080-4345-xx23"}",
12
12
 
13
- "43:76:4A:DD:2C:BB" :"{"uid":"dfjaskdi","email":"orenge@gamil.com","phone":"090-4649-77xx"}",
13
+ "43:76:4A:DD:2C:BB" =>"{"uid":"dfjaskdi","email":"orenge@gamil.com","phone":"090-4649-77xx"}",
14
14
 
15
- "43:76:4A:DD:2C:BB" :"{"phone":"090-4649-77xx","email":"remon@gamil.com"}",
15
+ "43:76:4A:DD:2C:BB" =>"{"phone":"090-4649-77xx","email":"remon@gamil.com"}",
16
16
 
17
17
  ........."":"{}"}]
18
18
 
@@ -28,9 +28,9 @@
28
28
 
29
29
  ```
30
30
 
31
- [{"32:5A:3D:87:21:AA" :"{"uid":"dfasdfas,kdjfasdf","email":"apple@gmail.com,bunana@gmail.com","phone":"080-4345-xx23"}",
31
+ [{"32:5A:3D:87:21:AA" =>"{"uid":"dfasdfas,kdjfasdf","email":"apple@gmail.com,bunana@gmail.com","phone":"080-4345-xx23"}",
32
32
 
33
- "43:76:4A:DD:2C:BB" :"{"uid":"dfjaskdi","email":"orenge@gamil.com,remon@gmail.com","phone":"090-4649-77xx"}",
33
+ "43:76:4A:DD:2C:BB" =>"{"uid":"dfjaskdi","email":"orenge@gamil.com,remon@gmail.com","phone":"090-4649-77xx"}",
34
34
 
35
35
  ........."":"{}"}]
36
36
 

3

修正

2018/08/06 07:05

投稿

kozica
kozica

スコア58

test CHANGED
File without changes
test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  ```ruby
6
6
 
7
- ["32:5A:3D:87:21:AA" :"{"uid":"dfasdfas","email":"apple@gmail.com"}",
7
+ [{"32:5A:3D:87:21:AA" :"{"uid":"dfasdfas","email":"apple@gmail.com"}",
8
8
 
9
9
  "32:5A:3D:87:21:AA" :"{"uid":"kdjfasdf","email":"apple@gmail.com"}",
10
10
 
@@ -14,7 +14,7 @@
14
14
 
15
15
  "43:76:4A:DD:2C:BB" :"{"phone":"090-4649-77xx","email":"remon@gamil.com"}",
16
16
 
17
- ........."":"{}"]
17
+ ........."":"{}"}]
18
18
 
19
19
  ```
20
20
 
@@ -28,10 +28,10 @@
28
28
 
29
29
  ```
30
30
 
31
- ["32:5A:3D:87:21:AA" :"{"uid":"dfasdfas,kdjfasdf","email":"apple@gmail.com,bunana@gmail.com","phone":"080-4345-xx23"}",
31
+ [{"32:5A:3D:87:21:AA" :"{"uid":"dfasdfas,kdjfasdf","email":"apple@gmail.com,bunana@gmail.com","phone":"080-4345-xx23"}",
32
32
 
33
33
  "43:76:4A:DD:2C:BB" :"{"uid":"dfjaskdi","email":"orenge@gamil.com,remon@gmail.com","phone":"090-4649-77xx"}",
34
34
 
35
- ........."":"{}"]
35
+ ........."":"{}"}]
36
36
 
37
37
  ```

2

修正

2018/08/06 06:59

投稿

kozica
kozica

スコア58

test CHANGED
File without changes
test CHANGED
@@ -4,17 +4,17 @@
4
4
 
5
5
  ```ruby
6
6
 
7
- ["32:5A:3D:87:21:AA" =>"{"uid":"dfasdfas","email":"apple@gmail.com"}",
7
+ ["32:5A:3D:87:21:AA" :"{"uid":"dfasdfas","email":"apple@gmail.com"}",
8
8
 
9
- "32:5A:3D:87:21:AA" =>"{"uid":"kdjfasdf","email":"apple@gmail.com"}",
9
+ "32:5A:3D:87:21:AA" :"{"uid":"kdjfasdf","email":"apple@gmail.com"}",
10
10
 
11
- "32:5A:3D:87:21:AA" =>"{"email":"bunana@gmail.com","phone":"080-4345-xx23"}",
11
+ "32:5A:3D:87:21:AA" :"{"email":"bunana@gmail.com","phone":"080-4345-xx23"}",
12
12
 
13
- "43:76:4A:DD:2C:BB" =>"{"uid":"dfjaskdi","email":"orenge@gamil.com","phone":"090-4649-77xx"}",
13
+ "43:76:4A:DD:2C:BB" :"{"uid":"dfjaskdi","email":"orenge@gamil.com","phone":"090-4649-77xx"}",
14
14
 
15
- "43:76:4A:DD:2C:BB" =>"{"phone":"090-4649-77xx","email":"remon@gamil.com"}",
15
+ "43:76:4A:DD:2C:BB" :"{"phone":"090-4649-77xx","email":"remon@gamil.com"}",
16
16
 
17
- .........""=>"{}"]
17
+ ........."":"{}"]
18
18
 
19
19
  ```
20
20
 
@@ -28,10 +28,10 @@
28
28
 
29
29
  ```
30
30
 
31
- ["32:5A:3D:87:21:AA" =>"{"uid":"dfasdfas,kdjfasdf","email":"apple@gmail.com,bunana@gmail.com","phone":"080-4345-xx23"}",
31
+ ["32:5A:3D:87:21:AA" :"{"uid":"dfasdfas,kdjfasdf","email":"apple@gmail.com,bunana@gmail.com","phone":"080-4345-xx23"}",
32
32
 
33
- "43:76:4A:DD:2C:BB" =>"{"uid":"dfjaskdi","email":"orenge@gamil.com,remon@gmail.com","phone":"090-4649-77xx"}",
33
+ "43:76:4A:DD:2C:BB" :"{"uid":"dfjaskdi","email":"orenge@gamil.com,remon@gmail.com","phone":"090-4649-77xx"}",
34
34
 
35
- .........""=>"{}"]
35
+ ........."":"{}"]
36
36
 
37
37
  ```

1

修正

2018/08/06 06:55

投稿

kozica
kozica

スコア58

test CHANGED
File without changes
test CHANGED
@@ -8,11 +8,11 @@
8
8
 
9
9
  "32:5A:3D:87:21:AA" =>"{"uid":"kdjfasdf","email":"apple@gmail.com"}",
10
10
 
11
- "32:5A:3D:87:21:AA" =>"{"email":"bunana@gmail.com","phone":"xxx-xxxx-xxxx"}",
11
+ "32:5A:3D:87:21:AA" =>"{"email":"bunana@gmail.com","phone":"080-4345-xx23"}",
12
12
 
13
- "43:76:4A:DD:2C:BB" =>"{"uid":"dfjaskdi","email":"orenge@gamil.com","phone":"xxx-xxxx-xxxx"}",
13
+ "43:76:4A:DD:2C:BB" =>"{"uid":"dfjaskdi","email":"orenge@gamil.com","phone":"090-4649-77xx"}",
14
14
 
15
- "43:76:4A:DD:2C:BB" =>"{"phone":"xxx-xxxx-xxxx","email":"remon@gamil.com"}",
15
+ "43:76:4A:DD:2C:BB" =>"{"phone":"090-4649-77xx","email":"remon@gamil.com"}",
16
16
 
17
17
  .........""=>"{}"]
18
18
 
@@ -21,3 +21,17 @@
21
21
  dataにはKeyとして'uid''email''phone'が入っています
22
22
 
23
23
  上記の配列で、MACアドレスがユニーク、dataがユニークかつマージされた配列に変更したいです。
24
+
25
+
26
+
27
+ 下記のような形にしたいです
28
+
29
+ ```
30
+
31
+ ["32:5A:3D:87:21:AA" =>"{"uid":"dfasdfas,kdjfasdf","email":"apple@gmail.com,bunana@gmail.com","phone":"080-4345-xx23"}",
32
+
33
+ "43:76:4A:DD:2C:BB" =>"{"uid":"dfjaskdi","email":"orenge@gamil.com,remon@gmail.com","phone":"090-4649-77xx"}",
34
+
35
+ .........""=>"{}"]
36
+
37
+ ```