Po prostu uczę się Rubiego, więc przepraszam, jeśli to jest zbyt nowicjusz na to tutaj, ale nie mogę tego rozwiązać z książki o kilofie (prawdopodobnie po prostu nie czytam wystarczająco uważnie). W każdym razie, jeśli mam taką tablicę:
arr = [1,2,3,4,5]
... i chcę, powiedzmy, pomnożyć każdą wartość w tablicy przez 3, wypracowałem to, wykonując następujące czynności:
arr.each {|item| item *= 3}
... nie da mi tego, czego chcę (i rozumiem dlaczego, nie modyfikuję samej tablicy).
Nie rozumiem, jak zmodyfikować oryginalną tablicę z wnętrza bloku kodu po iteratorze. Jestem pewien, że to bardzo proste.
Aby bezpośrednio zmodyfikować tablicę, użyj
arr.map! {|item| item*3}
. Aby utworzyć nową tablicę na podstawie oryginału (co jest często preferowane), użyjarr.map {|item| item*3}
. W rzeczywistości zawsze dwa razy się zastanawiam przed użyciemeach
, ponieważ zwykle istnieje funkcja wyższego rzędumap
,select
lubinject
robi to, co chcę.źródło
arr.map!{ destructive_op}
trwale zmienićarr
?arr.collect! {|item| item * 3}
źródło