-3

2 つの配列を結合したい。両方の配列には、共通の単一のキーを持つハッシュが含まれています: object_id.

data1 = [
  {"pid"=>"126199850741820_2172905", "object_id"=>606621809366286, "xcoord"=>81.885856079404, "ycoord"=>51.116625310174},
  {"pid"=>"126199850741820_2172905", "object_id"=>606621809366286, "xcoord"=>81.885856079404, "ycoord"=>51.116625310174}
]
data2 = [
  {"object_id"=>606621809366286, "name" => "123"},
  {"object_id"=>606621809366286, "name" => "321"}
]

2つの一致に基づいてデータをマージしたいと思いobject_idます。配列には、値を持つdata1キーを含むハッシュがあります。これら 2 つのハッシュをマージし、残りの 2 つのハッシュのデータを使用して新しいハッシュを出力する必要があります。"object_id""606621809366286"data2

データセット内に同じではない他のキーと値のペアがある場合、それは問題ではありません。私はそれらに一致する必要がありobject_idsます。

4

3 に答える 3

1

これがあなたが望むものだと思います:

merge = data1.dup
xref = {}
data2.each { |hash| xref[hash["object_id"]] = hash }
merge.each do |hash|
  oid = hash["object_id"]
  hash2 = xref[oid]
  if hash2
    hash2.each_pair do |kk, vv|
      next if "object_id" == kk
      hash[kk] = vv
    end
  end
end

データを使用してこのコードを実行し、次を発行します。

pp merge

生成:

[{"pid"=>"126199850741820_2172905",
  "object_id"=>606621809366286,
  "xcoord"=>81.885856079404,
  "ycoord"=>51.116625310174,
  "name"=>"321"},
 {"pid"=>"126199850741820_2172905",
  "object_id"=>606621809366286,
  "xcoord"=>81.885856079404,
  "ycoord"=>51.116625310174,
  "name"=>"321"}]
于 2013-05-20T19:56:39.587 に答える
0

あなたの例に同じIDを持つ4つのハッシュすべてがあるという事実は間違いであるか、実際には無関係であり、data1の各ハッシュを同じインデックスを持つdata2のハッシュとマージすることが本当に必要であると想定しています。

これはあなたが望むものです:

data1.zip(data2).map{|a| a[0].merge(a[1])}

出力:

[{"pid"=>"126199850741820_2172905",
  "object_id"=>606621809366286,
  "xcoord"=>81.885856079404,
  "ycoord"=>51.116625310174,
  "name"=>"123"},
 {"pid"=>"126199850741820_2172905",
  "object_id"=>606621809366286,
  "xcoord"=>81.885856079404,
  "ycoord"=>51.116625310174,
  "name"=>"321"}]
于 2013-05-21T02:49:12.053 に答える
0
require "pp"

data1 = [{"pid"=>"126199850741820_2172905", "object_id"=>606621809366286, "xcoord"=>81.885856079404, "ycoord"=>51.116625310174},{"pid"=>"126199850741820_2172905", "object_id"=>606621809366286, "xcoord"=>81.885856079404, "ycoord"=>51.116625310174}]
data2 = [{"object_id" => 606621809366286, "name" => "123"},{"object_id" => 606621809366286, "name" => "321"}]

pp data1.map{|h| data2.map{|i| h.merge(i) if i["object_id"]==h["object_id"]}.last}

出力:

[{"pid"=>"126199850741820_2172905",
  "object_id"=>606621809366286,
  "xcoord"=>81.885856079404,
  "ycoord"=>51.116625310174,
  "name"=>"321"},
 {"pid"=>"126199850741820_2172905",
  "object_id"=>606621809366286,
  "xcoord"=>81.885856079404,
  "ycoord"=>51.116625310174,
  "name"=>"321"}]
于 2013-05-20T19:49:31.860 に答える