2

ここにRubyのコードがあります。私はそれを単純化しようとしています。あなたはなにか考えはありますか?

def foo
   points = some_collection.map { |item| {:key1 => item.key1, :key2 => item.key2, :key3 => item.key3, :key4=> item.key4} }

   some_collection2.each do |item2|
    points << {:key1 => item2.key1, :key2 => item2.key2, :key3 => item2.key3, :key4=> item2.key4}
   end

   points
end
4

3 に答える 3

2

私が正しく理解している場合、マッピング関数はあなたのケースの両方のコレクションで同じです。

points = (some_collection + some_collection2).map do |item|
  {:key1 => item.method1, :key2 => item.method2, :key3 => item.key4, :key5=> item.key5}
end
于 2012-08-23T11:32:45.500 に答える
2

2 つのコレクションの変換結果を 2 つの配列に格納し、それらを足し合わせます。

def foo
   a1 = some_collection.map do |item| 
     {:key1 => item.method1, :key2 => item.method2, :key3 => item.key4, :key5=> item.key5}
   end
   a2 = some_collection2.map do |item|
    {:key1 => item.method1, :key2 => item.method2, :key3 => item.key4, :key5=> item.key5}
   end

   a1 + a2
end

または、必要に応じて、これになることもできます

def foo
   some_collection.map do |item| 
     {:key1 => item.method1, :key2 => item.method2, :key3 => item.key4, :key5=> item.key5}
   end + some_collection2.map do |item2|
    {:key1 => item.method1, :key2 => item.method2, :key3 => item.key4, :key5=> item.key5}
   end
end
于 2012-08-23T10:24:35.243 に答える
1

別の配列でキーのリストを抽出することもできるため、次のようになります。

keys = [:key1, :key2, :key3, :key4]

points = (some_collection + some_collection2).map do |item|
  Hash[keys.map{|key| [key, item.send(key)]}]
end
于 2012-08-23T12:49:43.847 に答える