我是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"]
非常感谢你的帮助!
答案 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