Как я могу просто объединить хэш в новый? - PullRequest
2 голосов
/ 10 июня 2009
I have a simple hash like so { "1234" => "5", "2345" => "6" }

Как я могу создать новый хеш с ключами и значениями в стороне от него? Вот так:

{ key_id = "1234", value_id = "5" }, { key_id = "2345", value_id = "6" }

Ответы [ 4 ]

6 голосов
/ 10 июня 2009

Чего вы на самом деле пытаетесь достичь с этим? Если вы хотите перебрать все ключи, вы можете использовать .keys:

h = { "1234" => "5", "2345" => "6" }
h.keys
=> ["1234", "2345"]

Если вы хотите просто создать массив хэшей, вы должны иметь возможность перебирать ключи:

h = { "1234" => "5", "2345" => "6" }
a = []

h.each {|k, v| a << {:key_id => k, :value_id => v}
1 голос
/ 10 июня 2009

Под "объединением" двух хешей я думаю, что вы хотите поместить все содержимое двух разных хешей в один новый хеш. Поскольку ключи хеша должны быть уникальными, если один и тот же ключ существует в обоих исходных хешах, может выжить только одно значение.

В этом примере я объединяю содержимое хеша x и хеша y в хеш z. Значения в y перезапишут значения в z, если есть какие-либо дубликаты ключей.

x = { "a" => "1","b" => "2","c" => "3" }
y = { "c" => "999","d" => "4","e" => "5" }
z = {}

x.each do |key,value|
  z[key] = value
end

y.each do |key,value|
  z[key] = value
end

Всего в исходных хешах было 6 ключей. Поскольку ключ «с» был в обеих цепях, объединенный хэш имеет только 5 ключей.

=> {"a"=>"1", "b"=>"2", "c"=>"999", "d"=>"4", "e"=>"5"}
0 голосов
/ 10 июня 2009

Какими должны быть ключи для производного хеша, такие же, как у оригинала? В этом случае используйте этот фрагмент:

x = { "1234" => "5", "2345" => "6" }
y = {}

x.each do |key, value|
    y[key] = { "key_id" => key, "value_id" => value }
end
0 голосов
/ 10 июня 2009

Вы можете перебрать каждую пару исходного хэша и создать массив хэшей:

hashes = []
{ "1234" => "5", "2345" => "6" }.each_pair {|key, value| hashes << { :key_id => key, :value_id => value } }

даст:

[{:key_id=>"2345", :value_id=>"6"}, {:key_id=>"1234", :value_id=>"5"}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...