循环数组并存储为新数组 - Ruby

时间:2013-07-27 00:35:05

标签: ruby-on-rails arrays

这很简单但我找不到任何东西。我有一个我想循环的数组,为每个数据拉出一个特定属性,然后将这些属性存储在一个新数组中。

基本上:

  • 商店array2 = [Array1[0].attr, Array1[2].attr, Array1[3].attr]

我有什么

<% storedArray = [] %>
<% @data = current_user.data_items %>
       <% @data.each do |data_item| %>
          <% storedArray[data_item.count] = data_item.url_metric.da %>
       <% end %>

更新:

我得到了它的工作,但是非常糟糕。建议?

<% array = []; i = 0 %>

   <% @data = current_user.reports[0].data_items %>
   <% @data.each do |data_item| %>
      <% array[i] = data_item.url_metric.da %>
      <% i = i+1 %>
   <% end %>
   <%= array %>

2 个答案:

答案 0 :(得分:1)

查看方法collect

它返回一个新数组,其中包含在循环通过源数组后创建的值。在您的问题中,代码将是:

# Get initial array
<% @data_items = current_user.reports[0].data_items %>

# Iterate through original array and return value to new array
<% @array = @data_items.collect do | data_item | %>
    # Process item
    <% data_item.url_metric.da %>
<% end %>

# Now your new array is ready to go.
<%= @array %>

答案 1 :(得分:0)

使用

<% @array= current_user.data_items.map {|data_item| data_item.url_metric.da} %>

您可以使用以下各项直接使用生成的数组:

<% current_user.data_items.map {|data_item| data_item.url_metric.da}.each |result| %>
# Do something with the result
<% end %>

有关更多列表操作,请参阅http://www.ruby-doc.org/core-2.0/Array.html