Ruby 列挙可能な each、map、select

マスターRuby列挙可能ファイル:each、map、select

ルビー ルビー列挙可能 モジュールは、表現力豊かな関数型反復処理を支える強力なツールだ。に混在している。 配列、ハッシュ、範囲、集合, とカスタム・コレクションを使用することで、クリーンで効率的なデータ処理が可能になる。. エキスパートによるRubyプロジェクトの強化 Railsコンサルティングサービス, よりクリーンで高性能なコードのために、各マップ、セレクトを最適化する。.

Ruby列挙可能:基礎

使用方法 ルビー列挙可能, を定義しなければならない。 :

ルビー
クラス ShoppingList
  インクルード Enumerable

  def initialize(*items)
    アイテム = アイテム
  終了

  def each(&block)
    items.each(&block)
  end
end

現在 ショッピングリスト サポート すべて Ruby 列挙可能 のメソッドがある。.

ルビーの列挙可能: - 項目ごとに実行

どうだろう?

すべての要素に対してブロックを実行する。. 元のコレクションを返します。.

ルビー
[1, 2, 3].each { |n| puts n * 2 }.
# 出力:
# 2
# 4
# 6
# 戻り値[1, 2, 3]

RubyのEnumerableを使うとき

  • ログまたは印刷
  • 副作用のトリガー(電子メール、APIコール)
  • 外部状態の蓄積
ルビー
合計 = 0
[10, 20, 30].each { |n| total += n }.
puts total # => 60

落とし穴: 決して使用しないこと 変換された配列を期待する。.

ルビー
# 間違い
[1, 2, 3].each { |n| n * 2 }.# => [1, 2, 3] です。

ルビーの列挙可能: 地図 (または 集める) - あらゆるアイテムを変身させる

地図 どうだろう?

ブロックと 新しい配列を返す 結果の.

ルビー
[1, 2, 3].map { |n| n * 2 }.# => [2, 4, 6].

RubyのEnumerableを使うとき 地図

  • データ型の変換
  • フィールドの抽出
  • 新しい構造物の建設

ルビー列挙可能 地図

名前を大文字にする

ルビー
["alice", "bob"].map(&:upcase) # => ["ALICE", "BOB"].

ユーザーEメールの抽出

ルビー
users = [{email: "[email protected]"}, {email: "[email protected]"}].
users.マップ { |u| u[:email] }.# => ["[email protected]", "[email protected]"].

インデックス付き

ルビー
fruits = ["apple", "banana"] フルーツ = ["リンゴ", "バナナ
fruits.map.with_index { |f, i| "#{i + 1}.#{f}"}
# => ["1. リンゴ", "2. バナナ"].

落とし穴:使用しない 地図 副作用のためだけである。.

ルビー
# [nil, nil, nil] を返す。
[1, 2, 3].map { |n| puts n }.

ルビーの列挙可能: 選択する (または find_all) - 一致する項目をフィルタリングする

選択する どうだろう?

を返します。 新しい配列 ブロックが返す要素の 真実.

ルビー
[1, 2, 3, 4].select(&:even?) # => [2, 4].

RubyのEnumerableを使うとき 選択する

  • 有効なレコードのフィルタリング
  • データ照会
  • コレクションのサブセット

ルビー列挙可能 選択する

合格スコア

ルビー
スコア = [89, 45, 92, 61]
score.select { |s| s >= 70 }.# => [89, 92] です。

アクティブユーザー

ルビー
ユーザー = [
  {name: "Alice", active: true}、
  {name: "Bob", active: false}.
]
users.select { |u| u[:active] }.# => [{name: "Alice", active: true}] です。

反対側: 拒否する

ルビー
[1, 2, 3, 4].reject(&:even?) # => [1, 3].

Rubyの列挙可能:主な違い

方法 リターン 目的
オリジナル・コレクション 副作用
地図 変換された値の新しい配列 データの変換
選択する 一致する要素の新しい配列 フィルターデータ

Ruby列挙可能:パワーの連鎖

表現力豊かなパイプラインのためのチェーンメソッド:

ルビー
(1..10)
  .select(&:even?) # [2, 4, 6, 8, 10].
  .map { |n| n ** 2 }.   # [4, 16, 36, 64, 100] .each { |q| puts n ** 2 }.
  .each { |sq| puts sq }.

実例だ:

ルビー
active_emails = ユーザー
  .select { |u| u[:active] && u[:age] >= 18 }.
  .マップ { |u| u[:email] }.

Rubyの列挙型:パフォーマンスのヒント

1パス > 2パス

ルビー
# より遅い:2回の繰り返し
users.map(&:age).select { |a| a > 18 }.

# より高速:1回の繰り返し
users.select { |u| u[:age] > 18 }.map(&:age)

記号からプロックへの速記法

ルビー
names.map(&:upcase)

大規模/無限データに対する遅延評価

ルビー
(1..Float::INFINITY).lazy
  .select(&:even?)
  .map { |n| n * n }.
  .first(5)
# => [4, 16, 36, 64, 100].

Ruby列挙可能:ボーナス・パターン

安全な構文解析 地図 + コンパクト

ルビー
["1", "2", "abc"].map { |s| Integer(s) rescue nil }.compact
# => [1, 2].

最初のマッチを探す

ルビー
admin = users.find { |u| u[:role] == "admin" }.  # select.firstより良い

で蓄積する each_with_オブジェクト

ルビー
[1, 2, 3].each_with_object({}) { |n, h| h[n] = n * 2 }.
# => {1=>2, 2=>4, 3=>6}.

Rubyの列挙可能:最終チェックリスト

  • 用途 → 副作用
  • 用途 地図 → 変換
  • 用途 選択する → フィルター
  • 明瞭さのためのチェーン
  • 戻り値を無視しない
  • 好む 探す オーバー select.first
  • 用途 へたれ 巨大/無限ストリーム用

結論:

RubyのEnumerableモジュールは単なるメソッド集ではありません。Rubyの 各、地図、 そして 選択する, そして、次のような能力が身につく:

  • 明確な意思表示 - もう混乱するループはない。.
  • バグを避ける - 戻り値は重要であり、これらのメソッドはそれを強制する。.
  • パフォーマンスの高いコードを書く - ワンパス演算と遅延評価。.
  • チェーン流暢 - 強力なデータパイプラインを1行で構築。.

レールカーマをリードしている。 Ruby on Rails開発会社, 私たちは、スケーラブルで保守性が高く、エレガントなアプリケーションを構築するために、日々これらの原則を適用しています。ユーザーのフィルタリング、データセットの変換、通知の送信など、当社の開発者はRubyのEnumerable(列挙可能)なパワーを活用して、表現力と効率性を兼ね備えたコードを書いています。.

これらの方法を毎日実践し、賢く連鎖させれば、やがてあなたはRubyを書くべくして書かれたように、エレガントで、表現力豊かで、楽に書けるようになる。.

ターミナルを開き、irbを起動し、以下を試してみる。 マップを選択する、 そして どんなアレイでも。パワーは、そしてRailsCarmaのやり方は、あなたの手の中にあります。.

関連記事

投稿者について

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


jaJapanese