Ruby ruby 如何实现连减

sunjohn · October 12, 2012 · Last by woaigithub replied at October 19, 2012 · 3915 hits

任意长度的数组,如何实现累减? 如: [1, 2, 3, 4, 5] 计算结果为: -13 我用的是这个:

def subtract(*nums)
    nums.inject(2 * nums[0]) { |sum, n| sum - n  }
end

但是感觉很别扭,有没有更简单的?

[1, 2, 3, 4, 5].inject(&:-)

[1,2,3,4,5].inject(0) { |s, a| s - a } 这样?不过如果初始值是 0 的话计算结果是 -15,不是 -13

#2 楼 @iBachue 这个好像不行。谢谢!

#1 楼 @Rei 谢谢,你的方法很好。

a.first - a[1,a.count - 1].sum

#5 楼 @jjym 不知为何,运行不出来结果,sum 未定义

arr = [1, 2, 3, 4, 5]
int = arr[0]
arr[1..-1].each do |num|
 int -= num
end
arr.first - arr[1..-1].reduce(:+)
arr.inject(:-)

arr = [1, 2, 3, 4, 5] arr.reduce(:-) 笑脸解决问题

def subtract(a)
  a.inject(0)(&:-)
end
def subtract(a)
  a.inject(&:-)
end

class Array
  def subtract()
    self.inject(&:-)
  end
end

#用法: [1, 2, 3, 4, 5].subtract

#9 楼 @sevk 这个很好,谢谢!

#10 楼 @sunjohn :- 和 &:-这两种方式有什么区别的?执行起来结果都是一样的

#11 楼 @xiaobingzai 第一个是传 symbol 第二个是 ruby 的语法,调用:-.to_proc 后作为块传过去

arr = [1,2,3,4,5,6] arr.sum-2*arr[1]

#12 楼 @jjym 学习了~~

[1,2,3,4,5].inject{|s,v|s-v}

新人报道:不知道你们是怎么体会:conding for fun 的。最近在抽空学 ruby,呵呵~conding for fun!

上面的方法都要警惕 Array 里第一个元素为 0 的情况。这是坑。

用谁去连减呢,基数是否应该是个参数呢

#18 楼 @suriv 我一般会指明第一个元素以免误解

# ruby-1.9.3
 [1,2,3,4,5].reduce(0,:-)
 => -15 
You need to Sign in before reply, if you don't have an account, please Sign up first.