階層化されたコレクションの平坦化方法~C#とRuby~

最近Rubyを使っているのだが、階層化されたコレクションを平坦化したいときどうやればよいか迷ったので、ちょっとした備忘として。。
普段はC#erなので、C#での方法も一応記載する。

やりたいこと

以下のように、階層化されたコレクションを平坦化して一つのコレクションに変換がしたい。

[0]:{ "Items" : ["あ", "い", "う"] }
[1]:{ "Items" : ["え", "お"] }
[2]:{ "Items" : ["か", "き", "く", "け"] }
↓
↓ 平坦化
↓
["あ", "い", "う", "え", "お", "か", "き", "く", "け"]

C#の場合、SelectManyを使う(LINQ)

var src = new Dictionary<string, string[]>[] {
    new Dictionary<string, string[]> {["Items"] = new []{"あ", "い", "う"}},
    new Dictionary<string, string[]> {["Items"] = new []{"え", "お"}},
    new Dictionary<string, string[]> {["Items"] = new []{"か", "き", "く", "け"}},
};

Console.WriteLine(string.Join(",", src.SelectMany(x => x["Items"])));
//→ あ,い,う,え,お,か,き,く,け

Rubyの場合、flat_mapを使う

src = [
    {Items: ["あ", "い", "う"]},
    {Items: ["え", "お"]},
    {Items: ["か", "き", "く", "け"]},
]
p src.flat_map { |x| x[:Items]  }
#→ ["あ", "い", "う", "え", "お", "か", "き", "く", "け"]

コメント

タイトルとURLをコピーしました