Onze dagmethode #7: Enumerable#mjoin
Geplaatst door Michiel de Mare wo, 13 feb 2008 08:00:00 GMT
Jullie kennen natuurlijkflatten
. flatten
neemt een array en walst hem plat. Na afloop bevat de array alleen nog niet-arrays. Maar soms heb je een array van arrays van arrays en wil je hem in een array van arrays omtoveren. Wat we nodig hebben is flatten-light: mjoin
module Enumerable
def mjoin
inject!([]) {|memo,x| a.each {|x| memo << x}}
end
end
(lees meer over inject!
).
Wanneer heb je dit nodig? Altijd als je map
wilt gebruiken maar je wilt niet elke keer precies één waarde teruggeven. en daarnaast sommige waardes in de array zelf arrays zijn, waardoor flatten
afvalt.
Klinkt dat uitermate zeldzaam? In feite is dit anders een doodnormale datastructuur. Een tabel is een array van arrays, en een join is een operatie die per row nul of meer resultaten teruggeeft. En vandaar ook de naam! (join
is natuurlijk al bezet – mjoin was geïnspireerd door dit artikel).
Binnenkort meer over tabellen als datastructuur in Ruby.
Las net dit artikel over een betere Array#to_hash en hoe dit breekt voor geneste arrays.
Mooi klusje voor mjoin!