【问题标题】:getting differences between values in an array获取数组中值之间的差异
【发布时间】:2014-09-07 15:50:26
【问题描述】:

我想在 ruby​​ 中编写一个 Array 方法,该方法获取数组中的连续值并将它们的差异作为新数组返回(在开头不移位“0”)。

因此将数组 [4,7,11,16] 输入该方法会返回一个新数组 [4,3,4,5]。

1) 这样的方法是否已经存在?

如果没有,那我想我知道怎么写了。然而,

2) 是否已经存在允许我测试输入数组并确保它仅包含整数和/或浮点数的方法?

再一次,如果没有,我想我知道怎么写。

【问题讨论】:

  • 为什么急于选择提供的第一个答案?您很幸运收到了其他答案,因为应用绿色复选标记通常会阻止这种情况。 (去吧,熊!)
  • 熊去吧! ——感谢您的留言。我是新手,仍在学习使用 stackoverflow。我本来可以等的,下次还会等。不幸的是,我无法对其他答案表示感谢,因为我还不允许投票。有什么建议吗?
  • 我的建议:获得代表。您可以在 cmets 中表达赞赏,但要选择性地这样做,保持高标准。另外,请阅读此faq

标签: ruby arrays


【解决方案1】:
p [4,7,11,16].unshift(0).each_cons(2).map{|a,b| b-a} # => [4, 3, 4, 5]

【讨论】:

    【解决方案2】:

    保持简单:

    arr = [4,7,11,16]
    
    last = 0
    arr.map { |e| new=e-last; last=e; new }
      #=> [4, 3, 4, 5]
    

    另一种方式:

    a = [arr.first]
    enum = arr.each
    loop do
      a << -enum.next + enum.peek
    end
    a
      #=> [4, 3, 4, 5]
    

    Enumerator#peekenum 位于其最后一个元素时引发StopIteration 异常。 Kernel#loop 通过中断循环来处理异常。

    【讨论】:

      【解决方案3】:

      关于第一种方法,我不知道 Ruby Array 类中有任何这样的方法。

      关于第二个,您可以按照in this answer的说明进行操作:

      your_array.all? {|i| i.is_a? Numeric }
      

      【讨论】:

      • 对于“整数和/或浮点数”使用Numeric 而不是Fixnum
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      相关资源
      最近更新 更多