Rubyのflat_mapを段階的に理解する

Ruby

― 元データから処理後まで ―

Rubyのflat_mapは、複雑なデータ構造をシンプルに扱える強力なメソッドです。この記事では実務風のデータを使って、「元データ → 処理 → 処理後データ」の3ステップで解説します。


🟢 レベル1:元データ(grouped_data)

まずは、グループごとにユーザー情報が格納されたハッシュ構造のデータです。

grouped_data = {
  "team_alpha" => [
    { name: "Alice", active: true,  status: :pending },
    { name: "Bob",   active: false, status: :confirmed }
  ],
  "team_beta" => [
    { name: "Carol", active: true,  status: :confirmed },
    { name: "Dave",  active: true,  status: :pending }
  ]
}

構造の特徴

  • 各キー(チーム名)に複数のユーザーデータ(ハッシュ)が格納されている
  • ネスト構造(ハッシュ → 配列 → ハッシュ)

🟡 レベル2:処理(flat_mapによる抽出と整形)

次に、条件に合うユーザーだけを抽出し、不要なnil値を除去します。

filtered_data = grouped_data.flat_map do |_team, members|
  members
    .select { |user| user[:active] && user[:status] != :confirmed }
    .map(&:compact)
end

処理のポイント

  • selectで「activeかつ未承認」のユーザーだけを抽出
  • map(&:compact)でnilを含むキーを除去(この例では影響なし)
  • flat_mapにより、すべてのチームの結果を一つの配列に統合

 レベル3:処理後データ(filtered_data)

最終的に得られるのは、条件に合うユーザーだけを集めたフラットな配列です。

[
  { name: "Alice", active: true, status: :pending },
  { name: "Dave",  active: true, status: :pending }
]

結果の特徴

  • ネストが解消され、一次元の配列に
  • 条件に合うユーザーのみが残る
  • データ整形済みで扱いやすい

✨ flat_mapの魅力まとめ

  • 複数の配列から必要なデータを抽出・整形・統合できる
  • ネスト構造を簡潔にフラット化できる
  • コード量を減らし、可読性を高められる

📝 おわりに

flat_mapは、複数の配列を扱う場面で「抽出・整形・統合」を一括でこなせる頼れるメソッドです。今回のように段階的に見ていくことで、その便利さと使いどころがより明確になります。ぜひあなたのコードにも取り入れてみてください!

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