2016-01-08 5 views
-4

Ceci est probablement super basique, mais j'ai assez de choses a essayé qui n'ont pas atteindre ..Ruby, faisant un nombre négatif

Je veux changer un numéro à sa version négative.

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] 

J'ai essayé aussi de faire un nouveau 'negarray' avec tous les nombres négatifs équivalents comme 'tableau'

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

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

Cheers!

+1

Cant reproduire. Obtenir '[-5]'. – ndn

+0

Je m'excuse mais je ne comprends pas cette question –

+0

@ndn - C'est étrange comme je reçois [5] et triple vérifié mon code, l'a donné à quelqu'un d'autre à courir et ils ont [-5]. –

Répondre

4

Dans la version actuelle, les questions ne sont pas claires.

Si vous voulez dire avec

Je veux changer un numéro à sa version négative.

que vous voulez toujours un nombre négatif, alors vous pouvez essayer:

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 

ou

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

ou avec un opérateur ternaire:

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

Ou plus court et plus ruby-esk (utilisant un opérateur ternaire):

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

Si vous préférez le plus si:

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

Si vous ne souhaitez pas utiliser si aucune structure, alors vous pouvez utiliser une abs méthode négative:

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

J'aime cette méthode abs négative! –

-1

Si vous voulez obtenir la valeur négative du second élément de tableau à l'index 1, procédez comme suit

answer << array[1] * -1 

Afin de changer toutes les valeurs d'un tableau aux nombres négatifs, utilisez les éléments suivants

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

la ligne suivante

if x > array[i+1] 

Vous dites en gros si t L'élément à la position i est supérieur à la position à i+1, vous voulez le rendre négatif. Le problème est que 5 est plus petit que l'élément suivant 6 et pour cette raison il n'est pas annulé.

Fixons votre code, et utilisez la méthode map pour simplifier:

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] 
+0

Merci Martin, en fait, j'ai montré mon exemple là-bas. J'aurais dû choisir un nombre différent de 5 pour illustrer mon propos. Excuses. Merci pour votre solution bien plus soignée! –