Ruby, 使数字为负数

Ruby, making a number negative

这可能是最基本的,但我已经尝试了很多东西,但都没有成功..

我想把一个数字改成负数。

answer = []
array = [3, 5, 2, 19, 2, 1]

array.each.with_index do |x, i|

   if x > array[i+1]
      answer << array[i] * -1
   else x =< array[i+1]
      answer << array[i] 
   end
 end
=> the answer I want is [-5] for when 'true' but I'm getting [5]

我还尝试制作一个新的 'negarray',所有等价的负数如 'array'

answer = []
array = [3, 5, 2, 19, 2, 1]
negarray = [-3, -5, -2, -19, -2, -1]

=> again, getting [5], and not the [-5] I want. 

干杯!

如果要获取索引 1 处第二个数组元素的负值,请执行以下操作

answer << array[1] * -1

为了将数组的所有值更改为负数,请使用以下

answer = array.map { |n| -n }

在实际版本中问题不清楚。

如果你的意思是

I want to change a number to it's negative version.

你总是想要一个负数,那么你可以试试:

answer = []
array = [3, 5, 6, 19, 2, 1]

array.each do |x|
   if x > 0
      answer << x * -1
   else
      answer << x 
   end
 end

 p answer

array.each do |x|
   answer << if x > 0
       x * -1
   else
       x 
   end
 end

或使用三元运算符:

array.each do |x|
   answer << (x > 0 ? -x : x)
 end

或更短更多ruby-esk(使用三元运算符):

 array = [3, 5, 6, 19, 2, -1]
 answer = array.map { |n| n > 0 ? -n : n }

如果你喜欢更长的时间 if:

 answer = array.map do |n| 
  if n > 0 
    -n 
  else
    n 
  end
 end

如果您不想使用任何 if-structure,那么您可以使用负数 abs-method:

 answer = array.map { |n| -n.abs }

用下面一行

if x > array[i+1]

你基本上是说如果位置 i 的元素大于 i+1 的位置,你想让它为负。问题是 5 小于下一个元素 6,因此它没有被取反。

让我们修复您的代码,并使用 map 方法来简化它:

out = array.map.with_index do |x, i|
   (array[i+1].nil? || x > array[i+1]) ? x : x*-1
end
# [-3, -5, -6, 19, 2, 1]