-3

3 つのハッシュがあります。各ハッシュは、1 つのキーと値のペアになります。

マージして json ファイルに出力すると、表示される k/v ペアのみがデータを含むものになります。

例えば:

employee_hours[ name ] =         {"Hours" => hours}
employee_revenue [ name ] =      {"Revenue" => revenue}
employee_activations [ name ] =  {"Activations" => activations}

k/v ペアのいずれかが存在しない場合は、それらを の値で出力に含める必要があります0.00

各ハッシュテーブルに他のハッシュからの空の k/v ペアを単純に含めようとしましたが、マージすると、既存の値が上書きされます。

employee_hours[ name ] =         {"Hours" => hours, "Revenue" = "", Activations = ""}
employee_revenue [ name ] =      {"Hours" => "", "Revenue" => revenue, Activations = ""}
employee_activations [ name ] =  {"Hours" => "", "Revenue" => "", "Activations" => activations}

編集

私の現在のコードはここにリストされています: https://gist.github.com/hnanon/766a0d6b2b0f9d9d03fd

4

3 に答える 3

1

デフォルト値のハッシュを定義し、それにマージする必要があります。employee_finalが、すべての従業員情報をマージしたハッシュであると仮定すると、

employee_defaults = { "Hours" => 0.0, "Revenue" => 0.0 }
employee_final.each_key do |name|
  employee_final[name] = employee_defaults.merge(employee_final[name])
end
于 2013-03-23T20:26:33.663 に答える
0

'REQUIRED_KEYS'配列を定義し、ハッシュにそれらが存在するかどうかのチェックを追加する必要があるように聞こえます。これを実現する1つの方法は次のとおりです。

REQUIRED_KEYS = [ "A", "B", "C" ]
DEFAULT_VALUE = 0.0    
REQUIRED_KEYS.each { |key| your_hash[key] = DEFAULT_VALUE if not your_hash.has_key?(key) }
于 2013-03-23T20:29:14.120 に答える
0

ハッシュのデフォルトを使用する

Hash#newの引数を使用して、ハッシュのデフォルト値を設定できます。例えば:

require 'json'

employee_hours       = Hash.new(0.0)
employee_revenue     = Hash.new(0.0)
employee_activations = Hash.new(0.0)

name = 'Bob'

{
  'Hours'       => employee_hours[name],
  'Revenue'     => employee_revenue[name],
  'Activations' => employee_activations[name],
}.to_json

# => "{\"Hours\":0.0,\"Revenue\":0.0,\"Activations\":0.0}"
于 2013-03-23T20:37:06.627 に答える