0

我有一个 JSON 文件,其解析数据存储在 @colors 实例变量中,如下所示:

[{:color=>"red", :value=>"#f00"} {:color=>"green", :value=>"#0f0"} {:color=>"blue", :value=>"#00f"} {:color=>"cyan", :value=>"#0ff"} {:color=>"magenta", :value=>"#f0f"} {:color=>"yellow", :value=>"#ff0"} {:color=>"black", :value=>"#000"}]

现在我想遍历这个输出以在一个视图中创建一个表

<tr><td>color</td><td>value</td></tr>

当我派生另一个这样的实例变量时——

@even_colors = @colors.values_at(* @colors.each_index.select {|i| i.even?}).map(&:values)

我得到一个由其他所有颜色/值对组成的数组数组

[["red", "#f00"], ["blue", "#00f"], ["magenta", "#f0f"], ["black", "#000"]]

但是我想创建两个单独的数组,一个仅包含由 :color (红色、蓝色等)指示的颜色名称,另一个仅由 :value (#f00、#00f 等)指示的十六进制组成。 )。我似乎无法弄清楚如何做到这一点。有人有什么建议吗?谢谢 ...

4

1 回答 1

2

您可以通过两次通过@colors

names = @colors.map { |h| h[:color] }
hexes = @colors.map { |h| h[:value] }

或者你可以通过:

parts = @colors.each_with_object({ :names => [ ], :hexes => [ ]}) do |h, parts|
    parts[:names].push(h[:color])
    parts[:hexes].push(h[:value])
end

然后查看parts[:names]颜色名称和parts[:hexes]十六进制值。

不过,我真的不明白您为什么要拆分@colors,您可以直接从以下位置生成表格@colors

<table>
    <% @colors.each do |h| %>
        <tr><td><%= h[:color] %></td><td><%= h[:value] %></td></tr>
    <% end %>
</table>

分成@colors两个数组对我来说似乎很忙。

于 2012-05-21T05:10:00.980 回答