Iteracja po tablicy

Cześć.
Dzisiaj zacząłem naukę Rubyego jednak mam problem ze zrozumieniem iteracji po tablicy.
Ogólnie rzecz biorąc przerobiłem już tematy poszczególnych pętli jednak mam problem z tym zapisem:

array.each do |i|
  puts "Element w tablicy = #{element}"
end

Czy byłby ktoś tak miły i wyjaśnił dokładnie co do czego :)?

Tutaj jest jeszcze takie zadanie odnośnie tej literacji

Zapisz do zmiennej sum sumę wszystkich elementów tablicy numbers (tablica jest już stworzona).

Byłbym bardzo wdzięczny za pomoc, liczę na to że ktoś mi to fajne to wytłumaczy :slight_smile:

Nie literacja a iteracja

Ten zapis jest bardzo prosty.
array jest twoją kolekcją, w tym przypadku tablicą, która posiada metodę nazwaną .each
Metoda ta bierze jeden argument którym jest coś co nazywa się blokiem.
W Rubym bloki zapisujemy na 2 sposoby:

{ |foo| bar }

albo

do |foo|
  bar
end

Według konwencji pierwszy zapis stosuje się gdy blok jest jednolinikowy a drugi zapis gdy wielolinijkowy.

Blok to taki specyficzny zapis funkcji która zostanie przekazana do eacha. Między pałeczkami podajesz jej argumenty (foo z przykładu) a następnie jej ciało (bar z przykładu). To co zrobi .each to weźmie twoją kolekcję - czyli array, i będzie brał po kolei każdy element i wywoływał tę funkcję z tym elementem.

Innymi słowy dla każdego elementu wywołany zostanie blok z danym elementem jako parametr.

[1,2,3].each { |i| puts i }
#> 1
#> 2
#> 3

jest praktycznie równoważne z

def foo(i)
  puts i
end

a = [1,2,3]
foo(a[0])
foo(a[1])
foo(a[2])

Niestety nic z tego nie rozumiem, dzisiaj zacząłem naukę i…
Patrz tutaj tak jest to przedstawione:
array = [0, 1, 2, 3, 4] for element in array puts "Element w tablicy = #{element}" end
i mam zrobić takie zadanie;
Zapisz do zmiennej sum sumę wszystkich elementów tablicy numbers (tablica jest już stworzona)

?

Masz zbiór liczb, który nazywa się array składa się on się z liczb 0,1,2,3,4
for i in array
znaczy tyle, co dla każdego elementu zbioru array nazwij element tego zbioru i

puts "Element w tablicy = #{i}"
znaczy tyle, co dla kazdego elementu array wyświetl taki napis ‘Element tablicy =’ + wartość zmiennej i czyli kolejno 0,1,2,3,4

end
To jest miejsce w którym konczy się pętla for i in array

Ja wpisałem tak ale to dalej nie działa :

sum=0
for sum in numbers
puts “Elementy =#{sum}”
end

numbers.each do |sum|
puts “Element w tablicy = #{sum}”
end

Chodzi oczywiście o:
Zapisz do zmiennej sum sumę wszystkich elementów tablicy numbers (tablica jest już stworzona przeze mnie).

zacznimy inaczej …

  1. twoja tablica z numerami nazywa się np: numery

numery = []

  1. do tablicy doajemy 3 numery

    numery << 1
    numery << 2
    numery << 3

  2. iteracja po tablicy

Tablica ma tetodę .each, która po kolei bierze każdy element, w naszym przypadku numer z tablicy i coś z nim robi. Na początek wyświetlimu sobie każdy elemet tablicy:

numery.each do |numer|
  puts "Moj numer to: #{numer}"
end

Analogicznie do tego można dodawać numery do zmiennej sum.

sum = 0

numery.each do |numer|
sum = sum + numer
end

puts "Suma: #{sum}"

tą linijkę: sum = sum + numer można zastąpić sum += numer

a całość:

numer.inject(:+)

2 Likes

[1,2,3].sum. Od ruby 2.4 :smiley: . Szach mat.

jasne, tak też można, ale mi chodziło o wytłumaczenie koledze jak działa interacja po tablicy

Takie heheszki nie gniewaj sie :slight_smile: