Руби, делая число отрицательным
Это, вероятно, супер базовый, но я попробовал достаточно вещей, которые не смогли достичь..
Я хочу изменить номер на его отрицательную версию.
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' со всеми эквивалентными отрицательными числами как 'массив'
answer = []
array = [3, 5, 2, 19, 2, 1]
negarray = [-3, -5, -2, -19, -2, -1]
=> again, getting [5], and not the [-5] I want.
Ура!
3 ответа
В актуальном варианте вопросы неясны.
Если вы имеете в виду с
Я хочу изменить номер на его отрицательную версию.
что вы хотите всегда отрицательное число, то вы можете попробовать:
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 }
Если вы предпочитаете дольше, если:
answer = array.map do |n|
if n > 0
-n
else
n
end
end
Если вы не хотите использовать какую-либо if-структуру, то вы можете использовать отрицательный abs-метод:
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]
Если вы хотите получить отрицательное значение второго элемента массива по индексу 1, сделайте следующее
answer << array[1] * -1
Чтобы изменить ВСЕ значения массива на отрицательные числа, используйте следующее
answer = array.map { |n| -n }