質問編集履歴

3

ソース追加

2016/03/28 02:51

投稿

nintail_fox
nintail_fox

スコア69

test CHANGED
File without changes
test CHANGED
@@ -140,14 +140,100 @@
140
140
 
141
141
 
142
142
 
143
+ ex1) 下記は完全一致
144
+
145
+ A [{id=1,z=1,X=1},{id=2,z=2,x=2},{id=3,z=3,X=3}]
146
+
147
+ B [{id=3,z=3,X=3},{id=2,z=2,x=2},{id=1,z=1,X=1}]
148
+
149
+
150
+
151
+ ex2) 下記はid=1以外不一致
152
+
153
+ A [{id=1,z=1,X=1},{id=2,z=2,x=2},{id=3,z=3,X=3}]
154
+
155
+ B [{id=3,z=3},{id=2,z=222,x=222},{id=1,z=1,X=1},{id=4,z=4,x=4,c=4]
156
+
157
+
158
+
143
159
  自分で考えてみたのですが、
144
160
 
145
161
  - JSON_AとJSON_Bを配列にデコード
146
162
 
147
- - 2つの配列をループ、その中で更にハッシュを2つ分ループさせながらkeyとvalueを1つずつ比較する
163
+ - 2つの配列をループ、その中で更にハッシュをループさせながらkeyとvalueを1つずつ比較する
148
164
 
149
165
  - 差分があるハッシュを配列にpushする
150
166
 
151
167
 
152
168
 
153
- という感じで、あまりスマートでないのでスッキリ書く方法があれば教えて下さい。
169
+ という感じで、ネストが深くあまりスマートでないのでスッキリ書く方法があれば教えて下さい。
170
+
171
+
172
+
173
+ 追記:
174
+
175
+ 自分が書いたコードです…。
176
+
177
+ aとbはJSONデコード済みと見て下さい。
178
+
179
+ ```ここに言語を入力
180
+
181
+ my $diff_data;
182
+
183
+ my $diff_flag = 0;
184
+
185
+ my $id_match_flag = 0;
186
+
187
+ foreach my $b_data (@$b) {
188
+
189
+ foreach my $a_data (@$a) {
190
+
191
+ if ($b_data->{'id'} eq $a_data->{'id'}) {
192
+
193
+ $id_match_flag = 1;
194
+
195
+
196
+
197
+ if (keys(%$b_data) ne keys(%$a_data)) {
198
+
199
+ push @$diff_data, $b_data;
200
+
201
+ }
202
+
203
+ else {
204
+
205
+ foreach my $key (keys(%$b_data)){
206
+
207
+ unless ($b_data->{$key} eq $a_data->{$key}) {
208
+
209
+ $diff_flag = 1;
210
+
211
+ }
212
+
213
+ }
214
+
215
+ }
216
+
217
+ if ($diff_flag) {
218
+
219
+ push @$diff_data, $b_data;
220
+
221
+ $diff_flag = 0;
222
+
223
+ }
224
+
225
+ }
226
+
227
+ }
228
+
229
+ unless ($id_match_flag) {
230
+
231
+ push @$diff_data, $b_data;
232
+
233
+ }
234
+
235
+ $id_match_flag = 0;
236
+
237
+ }
238
+
239
+ ```

2

タイトルの修正

2016/03/28 02:51

投稿

nintail_fox
nintail_fox

スコア69

test CHANGED
@@ -1 +1 @@
1
- たぐの【Perl】JSONデータの差分を取るには
1
+ 【Perl】JSONデータの差分を取るには
test CHANGED
File without changes

1

タグの追加

2016/03/24 09:30

投稿

nintail_fox
nintail_fox

スコア69

test CHANGED
@@ -1 +1 @@
1
- 【Perl】JSONデータの差分を取るには
1
+ たぐの【Perl】JSONデータの差分を取るには
test CHANGED
File without changes