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