/ / Each_pair analog dla tablicy (zipping 2 tablice) - ruby, tablice

Each_pair analog dla tablicy (zipping 2 tablice) - ruby, tablice

Jest each_pair metoda pozwala uzyskać pary skrótów w każdej iteracji pętli:

{ 1 => "a", 2 => "b" }.each_pair do |key, value|
# do something with #{key} and #{value}
end

W jaki sposób indeks bieżącego elementu tablicy może być znany w każdej iteracji pętli?

array.each do |element|
# what is element index in array?
end

Istnieje nudne rozwiązanie wykorzystujące inkrementujący iterator. Ale to iterator powinien zostać przypisany przed pętlą i powinien być ręcznie zwiększany o każdy iteracja. To jest oczywiście nudne.

Będzie świetnie, jeśli istnieje jakiś sposób na zip niektórych tablic 1.. array i zdobądź tablicę krotek ["b", "d", "e"] → [(1,"b"), (2,"d"), (3,"e")] and than pattern matched each element of the pair in| | `Instrukcja.

W końcu to, czego szukam, to jakaś funkcja f, to:

f(["a"]) do |index, element|
# index == 1, element == "a"
end

Odpowiedzi:

5 dla odpowiedzi № 1

Możesz przechodzić przez tablicę i pobierać bieżący indeks za pomocą Enumerable :: each_with_index


1 dla odpowiedzi nr 2

Popraw mnie, jeśli się mylę, ale zakładam, że chcesz tablicę składającą się z pod-tablic z indeksem tablic i wartościami original?

a= ["b", "d", "e"]
a.enum_with_index.map {|ind, val| [ind, val]
=> [[0, "b"], [1, "d"], [2, "e"]]