遍历所有数组元素并向元素添加变量 ruby
Iterate over all array elements and add a variable to element ruby
我有一个 CLI 应用程序,可以删除 5 个不同的交易页面并将其保存到 @@all class 变量中。我希望它们都有一个新变量,该变量应从 1 开始到 100(因为总共有 100 笔交易)。我尝试了很多,但它只显示所有交易的数字 1。
def deals_listing
all_deals = PopularDeals::NewDeals.all
@deals = []
all_deals.collect do |deal_info|
i = 1
deal_info.number = i
@deals << deal_info
i = i + 1
end
@deals
binding.pry
end
我得到的输出样本是..
pry(#<PopularDeals::CLI>)> @deals
=> [#<PopularDeals::NewDeals:0x00000001aaf220
@deal_rating="+7",
@number=1,
@posted="Posted Today",
@price=".64",
@title=
"Back Again at Amazon Campbell's Slow Cooker Sauces, Apple Bourbon Pulled Pork, 13 Ounce (Pack of 6) as low as .64 w/ Subscribe and Save S&S w/ Free Shipping",
@url=
"https://slickdeals.net/f/10033448-back-again-at-amazon-campbell-s-slow-cooker-sauces-apple-bourbon-pulled-pork-13-ounce-pack-of-6-as-low-as-7-64-w-subscribe-and-save-s-
s-w-free-shipping">,
#<PopularDeals::NewDeals:0x00000001a876f8
@deal_rating="+6",
@number=1,
@posted="Posted Today",
@price=".33",
@title=
"LUCKLED 20 LED Solar Powered Dragonfly String Lights Multi-color .33 AC, FS w/prime @Amazon",
@url=
ing-lights-multi-color-5-33-ac-fs-w-prime-amazon">,
#<PopularDeals::NewDeals:0x00000001a84228
@deal_rating="+6",
@number=1,
@posted="Posted Today",
@price="9.99",
@title=
ping @ Walmart",
@url=
efurbished-339-99-free-shipping-walmart">,
#<PopularDeals::NewDeals:0x00000001a80ad8
@deal_rating="+6",
@number=1,
:
我想要的..
pry(#<PopularDeals::CLI>)> @deals
=> [#<PopularDeals::NewDeals:0x00000001aaf220
@deal_rating="+7",
@number=1,
@posted="Posted Today",
@price=".64",
@title=
"Back Again at Amazon Campbell's Slow Cooker Sauces, Apple Bourbon Pulled Pork, 13 Ounce (Pack of 6) as low as .64 w/ Subscribe and Save S&S w/ Free Shipping",
@url=
"https://slickdeals.net/f/10033448-back-again-at-amazon-campbell-s-slow-cooker-sauces-apple-bourbon-pulled-pork-13-ounce-pack-of-6-as-low-as-7-64-w-subscribe-and-save-s-
s-w-free-shipping">,
#<PopularDeals::NewDeals:0x00000001a876f8
@deal_rating="+6",
@number=2,
@posted="Posted Today",
@price=".33",
@title=
"LUCKLED 20 LED Solar Powered Dragonfly String Lights Multi-color .33 AC, FS w/prime @Amazon",
@url=
ing-lights-multi-color-5-33-ac-fs-w-prime-amazon">,
#<PopularDeals::NewDeals:0x00000001a84228
@deal_rating="+6",
@number=3,
@posted="Posted Today",
@price="9.99",
@title=
ping @ Walmart",
@url=
efurbished-339-99-free-shipping-walmart">,
#<PopularDeals::NewDeals:0x00000001a80ad8
@deal_rating="+6",
@number=4,
:
有什么建议可以让它发挥作用吗?非常感谢您。
嗯,这个问题已经解决了。我得到了答案。如果其他人正在尝试做这样的事情,我就是这样做的。
def deals
all_deals = PopularDeals::NewDeals.all
@deals = []
all_deals.collect do |deal_info|
deal_info.number = all_deals.index(deal_info).to_i + 1
@deals << deal_info
end
@deals
end
我用.index的方法找到索引号,然后加一,从1开始,赋值给deal_info.number
如果您想用某个对象在某个数组中的位置填充 属性:
@deals = PopularDeals::NewDeals.all.each_with_index.map do |deal, i|
deal.number = i
deal
end
这使您可以一次性获取、迭代和分配,同时尽可能减少混乱。 each_with_index
方法为每个元素提供简单的索引,map
允许您将其转换为最终数组。
我有一个 CLI 应用程序,可以删除 5 个不同的交易页面并将其保存到 @@all class 变量中。我希望它们都有一个新变量,该变量应从 1 开始到 100(因为总共有 100 笔交易)。我尝试了很多,但它只显示所有交易的数字 1。
def deals_listing
all_deals = PopularDeals::NewDeals.all
@deals = []
all_deals.collect do |deal_info|
i = 1
deal_info.number = i
@deals << deal_info
i = i + 1
end
@deals
binding.pry
end
我得到的输出样本是..
pry(#<PopularDeals::CLI>)> @deals
=> [#<PopularDeals::NewDeals:0x00000001aaf220
@deal_rating="+7",
@number=1,
@posted="Posted Today",
@price=".64",
@title=
"Back Again at Amazon Campbell's Slow Cooker Sauces, Apple Bourbon Pulled Pork, 13 Ounce (Pack of 6) as low as .64 w/ Subscribe and Save S&S w/ Free Shipping",
@url=
"https://slickdeals.net/f/10033448-back-again-at-amazon-campbell-s-slow-cooker-sauces-apple-bourbon-pulled-pork-13-ounce-pack-of-6-as-low-as-7-64-w-subscribe-and-save-s-
s-w-free-shipping">,
#<PopularDeals::NewDeals:0x00000001a876f8
@deal_rating="+6",
@number=1,
@posted="Posted Today",
@price=".33",
@title=
"LUCKLED 20 LED Solar Powered Dragonfly String Lights Multi-color .33 AC, FS w/prime @Amazon",
@url=
ing-lights-multi-color-5-33-ac-fs-w-prime-amazon">,
#<PopularDeals::NewDeals:0x00000001a84228
@deal_rating="+6",
@number=1,
@posted="Posted Today",
@price="9.99",
@title=
ping @ Walmart",
@url=
efurbished-339-99-free-shipping-walmart">,
#<PopularDeals::NewDeals:0x00000001a80ad8
@deal_rating="+6",
@number=1,
:
我想要的..
pry(#<PopularDeals::CLI>)> @deals
=> [#<PopularDeals::NewDeals:0x00000001aaf220
@deal_rating="+7",
@number=1,
@posted="Posted Today",
@price=".64",
@title=
"Back Again at Amazon Campbell's Slow Cooker Sauces, Apple Bourbon Pulled Pork, 13 Ounce (Pack of 6) as low as .64 w/ Subscribe and Save S&S w/ Free Shipping",
@url=
"https://slickdeals.net/f/10033448-back-again-at-amazon-campbell-s-slow-cooker-sauces-apple-bourbon-pulled-pork-13-ounce-pack-of-6-as-low-as-7-64-w-subscribe-and-save-s-
s-w-free-shipping">,
#<PopularDeals::NewDeals:0x00000001a876f8
@deal_rating="+6",
@number=2,
@posted="Posted Today",
@price=".33",
@title=
"LUCKLED 20 LED Solar Powered Dragonfly String Lights Multi-color .33 AC, FS w/prime @Amazon",
@url=
ing-lights-multi-color-5-33-ac-fs-w-prime-amazon">,
#<PopularDeals::NewDeals:0x00000001a84228
@deal_rating="+6",
@number=3,
@posted="Posted Today",
@price="9.99",
@title=
ping @ Walmart",
@url=
efurbished-339-99-free-shipping-walmart">,
#<PopularDeals::NewDeals:0x00000001a80ad8
@deal_rating="+6",
@number=4,
:
有什么建议可以让它发挥作用吗?非常感谢您。
嗯,这个问题已经解决了。我得到了答案。如果其他人正在尝试做这样的事情,我就是这样做的。
def deals
all_deals = PopularDeals::NewDeals.all
@deals = []
all_deals.collect do |deal_info|
deal_info.number = all_deals.index(deal_info).to_i + 1
@deals << deal_info
end
@deals
end
我用.index的方法找到索引号,然后加一,从1开始,赋值给deal_info.number
如果您想用某个对象在某个数组中的位置填充 属性:
@deals = PopularDeals::NewDeals.all.each_with_index.map do |deal, i|
deal.number = i
deal
end
这使您可以一次性获取、迭代和分配,同时尽可能减少混乱。 each_with_index
方法为每个元素提供简单的索引,map
允许您将其转换为最终数组。