Rubyセット–例、演算子、メソッド
Rubyセットとは何ですか?
セットは、配列などのアイテムを格納するクラスです…
しかし、それを10倍速くするいくつかの特別な属性があります 特定の状況で!
その上:
セット内のすべてのアイテムは一意であることが保証されています 。
このRubyチュートリアルでは、次のことを学びます。
- 最大の利益を得るためにセットを使用する方法と時期
- セットと配列の違い!
- 便利なsetメソッドのリスト
始めましょう!
ルビーセットの例
セットは、一意のアイテムのリストを作成するのに役立つRubyクラスです。 。
これがどのように役立つかの例を次に示します。
膨大な数の製品を調べているとしましょう。
ただし、重複するエントリがあります このリストにあり、あなたはユニークな製品だけが欲しいです。
それらをセットに入れることができ、セットはあなたの製品リストが常に余分な作業なしでユニークであることを保証します 。
その方法は次のとおりです。
require 'set' products = Set.new products << 1 products << 1 products << 2 products # Set: {1, 2}
もう1つの利点は、このリストの検索が非常に高速になることです :
products.include?(1) # true
検索は一定時間で行われるため、これは非常に高速です。
セットと配列–違いを理解する
今、あなたは疑問に思うかもしれません…
セットとアレイの違いは何ですか?
セットは要素に直接アクセスできません:
products[0] # undefined method `[]'
それが主な違いです。
ただし、セットは配列に変換できます 必要なときはいつでも:
products.to_a # [1, 2]
セットを使用することの全体的なポイントは、その2つの特別な属性を使用することです。
- 高速ルックアップ時間(
include? code>を使用) )
- 固有の値
これらが必要な場合は、セットを使用するとパフォーマンスが向上します 、 uniq
を呼び出す必要はありません 一意の要素が必要になるたびに配列に追加します。
セットとアレイのベンチマーク
これは、アレイとセットの include?code>のパフォーマンスの違いを示すベンチマークです。 メソッド。
# Ruby 2.5.0 set include: 8381985.2 i/s array include: 703305.5 i/s - 11.92x slower
この違いの理由は、配列はすべての要素をチェックする必要があるためです!
100万個の要素配列がある場合、 include?code>を呼び出すたびに100万個の要素をチェックします。 。
セットはそれをする必要はありません。
ルビーセットメソッド
セット間で実行できる操作やメソッドは多数あります。数学のバックグラウンドがある場合は、それらを認識できる可能性があります。
ユニオンオペレーター
便利なsetメソッドの1つは、ユニオン演算子です:
products | (1..10) # Set: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
この演算子を使用すると、2つのセットのすべての一意の要素を1つのセットに組み合わせることができます。
ところで、これは、 Set
のオブジェクトだけでなく、配列、範囲、ハッシュなどの列挙可能なオブジェクトで機能します。 クラス。
差分演算子
あるセットの要素を別のセットから削除したい場合は、これがあなたの方法です。
ここに例があります :
products - (3..4) # Set: {1, 2, 5, 6, 7, 8, 9, 10}
交差点演算子
これがセットです 交差演算子:
Set.new(1..3) & Set.new(2..5) # Set: {2, 3}
これにより、両方のセットに共通する要素が得られます。 これらの3つの演算子(和集合、差、共通部分)は配列でも使用できます。
スーパーセットとサブセット
スーパーセットは、別のセットのすべての要素を含むセットです。 。
あるセットが別のセットのスーパーセットであるかどうかを確認できます。
このように :
Set.new(10..40) >= Set.new(20..30)
範囲10..40
20..30
が含まれています その中。
サブセット 別のセットの一部から作成されたセットです:
Set.new(25..27) <= Set.new(20..30)
並べ替えられたセットの使用方法
常に並べ替えられたままのセットが必要な場合 SortedSet
を使用できます クラス。
このクラスを使用するには、いくつかの要件があります。
- セットに追加するオブジェクトは実装する必要があります <=>メソッド。
- オブジェクトは互いに比較可能である必要があります (整数と整数、または文字列と文字列の比較)
次に例を示します:
sorted_numbers = SortedSet.new sorted_numbers << 5 sorted_numbers << 2 sorted_numbers << 1 sorted_numbers # SortedSet: {1, 2, 5}
ビデオチュートリアルを設定します
概要
パフォーマンスを向上させ、コーディングを容易にするために、Rubyでセットを使用する方法を学びました。配列とセットの違いについても学びました。
より多くの人が見つけられるように、この記事が役に立ったと思ったら共有してください🙂
読んでくれてありがとう!
-
Rubyメソッドをスパイする方法
Rubyには、TracePointを使用してアクセスできるトレースシステムが組み込まれています。 クラス。トレースできるものには、メソッド呼び出し、新しいスレッド、および例外があります。 なぜこれを使いたいのですか? さて、特定のメソッドの実行を追跡したい場合に便利です。他にどのようなメソッドが呼び出されているか、および戻り値は何かを確認できます。 いくつかの例を見てみましょう! メソッド呼び出しのトレース ほとんどの場合、TracePointが必要になります 組み込みメソッド(プット、サイズなど)ではなくアプリケーションコードをトレースするため。 これは、callを使用して行うこと
-
Rubyの配列クラスの使用方法(例+便利なメソッド)
アレイとは何ですか? 配列は組み込みのRubyクラスであり、0個以上のアイテムのリストを保持します 、およびこれらすべてのアイテムを簡単に追加、アクセス、およびループするのに役立つメソッドが含まれています。 配列が存在しない場合は多くの変数を使用する必要があるため、これは便利です。 例 : a =1b =2c =3 しかし、代わりに、あなたはそうすることができます : 番号=[1、2、3] 最良の部分は? 配列内には何でも入れることができます! いいね : 数字 文字列 より多くのアレイ! (それは多次元配列になります) アレイを最大限に活用できるように、アレイについ