【问题标题】:Ruby, making a number negative红宝石,使一个数字为负
【发布时间】:2016-04-13 18:52:45
【问题描述】:

这可能是超级基本的,但我已经尝试了足够多的东西但未能达到..

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

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. 

干杯!

【问题讨论】:

  • 无法重现。获取[-5]
  • 我很抱歉,但我不明白这个问题
  • @ndn - 当我得到 [5] 并三次检查我的代码时,这很奇怪,将其交给其他人运行,他们得到 [-5]。

标签: ruby integer negative-number negative-integer


【解决方案1】:

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

如果你的意思是

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

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

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 结构,那么你可以使用否定的 abs 方法:

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

【讨论】:

  • 我喜欢这种消极的腹肌方法!
【解决方案2】:

下面一行

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]

【讨论】:

  • 谢谢马丁,我实际上是在那儿总结了我的例子。我应该选择一个与 5 不同的数字来说明我的观点。道歉。不过感谢您提供更简洁的解决方案!
【解决方案3】:

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

answer << array[1] * -1

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

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

【讨论】:

    猜你喜欢
    • 2015-01-21
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多