【问题标题】:How does one populate an array in Ruby?如何在 Ruby 中填充数组?
【发布时间】:2011-06-03 04:02:09
【问题描述】:

这是我正在使用的代码:

class Trader

  def initialize(ticker ="GLD") 
    @ticker = ticker
  end

  def yahoo_data(days=12)

    require 'yahoofinance'

    YahooFinance::get_historical_quotes_days( @ticker, days ) do |row|
      puts "#{row.join(',')}"  # this is where a solution is required
    end
  end
end

yahoo_data 方法从 Yahoo Finance 获取数据并将价格历史记录放在控制台上。但是,您将如何使用前面的代码来填充一个以后可以作为对象操作的数组,而不是一个简单的 put 蒸发到以太中。

类似于:

do |row| populate_an_array_method(row.join(',') end                                                                                                              

【问题讨论】:

    标签: ruby arrays methods


    【解决方案1】:

    如果你不给 get_historical_quotes_days 一个块,你会得到一个数组。然后,您可以在其上使用map 来获取join 的结果数组。

    一般来说,自从 ruby​​ 1.8.7 以来,大多数迭代器方法在没有块的情况下被调用时都会返回一个可枚举的值。因此,如果foo.bar {|x| puts x} 将打印值 1,2,3,那么enum = foo.bar 将返回一个包含值 1,2,3 的可枚举。如果你做arr = foo.bar.to_a,你会得到数组[1,2,3]

    如果有一个不这样做的迭代器方法(可能来自一些不遵守此约定的库),您可以使用foo.enum_for(:bar) 来获取一个包含bar 产生的所有值的枚举。

    所以假设,如果get_historical_quotes_days 还没有返回一个数组,你可以使用YahooFinance.enum_for(:get_historical_quotes_days).map {|row| row.join(",") } 来得到你想要的。

    【讨论】:

    • 好吧,这比我想象的要容易。当我将块注释掉时,创建一个名为“a”的新对象,然后调用“a.yahoo_data”,我得到一个数组。并且通过分配诸如'q = a.yahoo_data'之类的变量,q.class的调用返回'Array'。 q.length 返回“8”。
    猜你喜欢
    • 1970-01-01
    • 2014-09-28
    • 2019-07-28
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    相关资源
    最近更新 更多