在 Ruby 中追加和递增哈希


Append and increment hash in Ruby

我有这个哈希:

hash = {:title=>"blabla", :content=>"blabla", :mark=>40}

在一个循环中,我想用另一对相同的键 => 值对象来递增它。

我想要的在 PHP 中看起来像这样

    hash = array(
            0 => array(
              'title' => 'blabla',
              'content' => 'blabla',
              'mark' => 50,
            ),
            1 => array(
              'title' => 'blabla',
              'content' => 'blabla',
              'mark' => 50,
            )
     );

为了拥有它,我会像那样循环

foreach ($elements as $element) {
   $hash[] = array('title' => $element['title'],
                   'content' => $element['blabla'],
                   'mark' => $element['mark']
             );
}

变量名后面的[],在 php 中自动递增数组,但它的行为方式似乎与 Ruby 不同。

预期的 Ruby 输出如下:

hash = {
                {
                  'title' => 'blabla',
                  'content' => 'blabla',
                  'mark' => 50,
               },
                {
                  'title' => 'blabla',
                  'content' => 'blabla',
                  'mark' => 50,
               }
         }

我认为PHP的数组/哈希对偶性让你感到困惑。"带有自动递增键的哈希"只是 ruby 中的一个数组。您可以通过索引(自然是自动递增的)访问其元素。

result = elements.map do |element|
  {
    'title' => element['title'],
    # ...
  }
end
result # [{'title' => 'foo'}, {'title' => 'bar'}, ...]
result[0] # {'title' => 'foo'}

我希望下面是您正在寻找的解决方案。

output_hash = {}
elements.each_with_index do |element, index|
 item = {}
 item[:title] = element['title']
 item[:content] = element['content']
 item[:mark] = element['mark']
 output_hash["#{index}"] = item
end

结果

{"0"=>{:title=>"blabla", :content=>"blabla", :mark=>50}, 
 "1"=>{:title=>"blabla", :content=>"blabla", :mark=>50}}