代码之家  ›  专栏  ›  技术社区  ›  Spyros

从数组中删除nil值,并从引用数组中删除相应的项

  •  0
  • Spyros  · 技术社区  · 3 年前

    我有两个数组生成自:

    @dividends_values = @dividends.historical.map(&:dividend).reverse.last(50)
    @dividends_dates = @dividends.historical.map(&:date).reverse.last(50)
    

    第一个数组是一个浮点值数组,其中偶尔会有几个nil条目。我想删除那些nil条目(使用compact或类似的东西很容易),但我还想从@distributions_dates数组中删除相应的条目。

    这是因为dates数组是对values数组的1-1引用,所以带有日期的数组的索引0对应于带有值的数组的索引0。

    做这件事的好方法是什么?

    1 回复  |  直到 3 年前
        1
  •  1
  •   Schwern    3 年前

    首先,按零过滤。然后把它分成两个数组。

    @last_dividends = @dividends.historical.select { |d| d.dividend }
    @dividends_values = @last_dividends.map(&:dividend)
    @dividends_dates = @last_dividends.map(&:date)
    

    更好的是,把它们变成一个单一的数组 [[dividend, date], [...]]

    @last_dividends = @dividends
      .historical
      .select { |d| d.dividend }
      .map { |d| [d.dividend, d.date] }