我想将循环结果存储到数组中

时间:2016-06-16 15:16:13

标签: arrays ruby string

我是Ruby的总菜鸟,所以我向那些知道:)的人学习 我确实已经找到了这个答案,但徒劳无功......

我希望将循环中的结果转换为新数组。但我不能......

@angelco_account = ["https://angel.co/unstock", "https://angel.co/groupclip"]

@angelco_account.each do |i|
  @twitter_url = []
  @twitter_url << Nokogiri::HTML(open("#{i}", "User-Agent" => "Mozilla/5.001(windows; U; NT4.0; en-us)  Gecko/25250101")).css('a.twitter_url.icon_link.fontello-twitter')[0]["href"]
  puts @twitter_url
end

我在我的irb中得到了这个结果

 https://twitter.com/UnStock_Market
 https://twitter.com/groupclip
 => ["https://angel.co/unstock", "https://angel.co/groupclip"] 

我想把它放到@twitter_url

["https://twitter.com/UnStock_Market", "https://twitter.com/groupclip"] 

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:2)

您的代码的主要问题是您在每次迭代上将@twitter_url分配给空数组。一般来说,交换行:

@angelco_account.each do |i|
  @twitter_url = []

为:

@twitter_url = []
@angelco_account.each do |i|

应该做的伎俩。但为此目的,最好使用Enumerable#each_with_object

@twitter_url = @angelco_account.each_with_object([]) do |i, memo|
  memo << Nokogiri::HTML(open("#{i}", ...).
            css('a.twitter_url.icon_link.fontello-twitter')[0]["href"]
end
puts @twitter_url

或者,在这种特殊情况下,Enumerable#map就足够了:

@twitter_url = @angelco_account.map do |account|
  Nokogiri::HTML(open("#{i}", ...).
    css('a.twitter_url.icon_link.fontello-twitter')[0]["href"]
end
puts @twitter_url

答案 1 :(得分:1)

如果你想使用惯用的Ruby,你可以这样做:

@angelco_account = ["https://angel.co/unstock", "https://angel.co/groupclip"]
@twitter_url = @angelco_account.map {|url| Nokogiri::HTML(open("#{url}", "User-Agent" => "Mozilla/5.001(windows; U; NT4.0; en-us)  Gecko/25250101")).css('a.twitter_url.icon_link.fontello-twitter')[0]["href"] }
puts @twitter_url