Onze dagmethode #7: Enumerable#mjoin

Geplaatst door Michiel de Mare wo, 13 feb 2008 08:00:00 GMT

Jullie kennen natuurlijk flatten. 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.

Geplaatst in ,  | 1 reactie

Reacties

  1. Michiel zei 16 dagen later:

    Las net dit artikel over een betere Array#to_hash en hoe dit breekt voor geneste arrays.

    Mooi klusje voor mjoin!

    
    class Array
      def to_hash
        Hash[*mjoin]
      end
    end
    

(Laat url/e-mail achter »)

   Voorvertoning