2016-06-21 6 views
0

Ich benutze Ruby, und ich lerne Arrays neu und versuche sie besser zu verstehen. Ich weiß, was sie sind, aber habe sie nie vollständig genutzt. Ich habe ein Array, Quoten und wollte jede Zahl darin verdoppeln. Ich habe die folgende Lösung gefunden. Ich wollte jedoch sehen, ob es eine elegantere/einfachere Lösung für mein Problem gibt.Wie man ein Array am besten mit .each ändert

odds = [1,3,5,7,9] 

odds.each do |x| 
    odds[odds.index(x)]=x*2 
end 

Endergebnis ist odds = [2,6,10,14,18]

+5

Sie haben die von Ihnen verwendete Programmiersprache nicht angegeben. Bitte markieren Sie die Frage. –

Antwort

2

Sie die map! enumerator können jedes Element in einem Array ändern:

odds.map!{ |x| x*2} 
1

Wenn Sie wirklich an Ort und Stelle zu ändern, und Sie wirklich wollen, Verwenden Sie each, ich denke, Ihr Ansatz ist so gut wie jeder andere. Es fühlt sich nicht idiomatisch an, aber es erfüllt Ihre angegebenen Einschränkungen.

Hier sind einige weitere gemeinsame Ansätze:

Array.map

Mapping the Array mit map wird das ursprüngliche Array nicht ändern (es nicht an Ort und Stelle ist), die eine oft gute Sache, aber es könnte nicht sein, was Sie suchen:

odds.map { |x| x*2 } 

Array.map!

Wenn Sie wirklich das ursprüngliche Array ändern möchten, können Sie map! verwenden zur Karte in-place:

odds.map! { |x| x*2 } 

Array.each_index

Sie haben each speziell über fragen Wenn Sie also ein each verwenden und das ursprüngliche Array ändern möchten, ist möglicherweise die beste Wahl:

odds.each_index { |i| odds[i] *= 2 }