在Ruby

时间:2016-01-25 09:16:52

标签: php ruby-on-rails 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,
               }
         }

2 个答案:

答案 0 :(得分:1)

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

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

result # [{'title' => 'foo'}, {'title' => 'bar'}, ...]
result[0] # {'title' => 'foo'}

答案 1 :(得分:0)

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

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}}