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]
这可能是最基本的,但我已经尝试了很多东西,但都没有成功..
我想把一个数字改成负数。
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]