[解決済み] カウント、サイズ、長さ...Rubyの選択肢は多すぎ?
質問
この件に関して明確な答えが見つからないようなので、私がこの件について理解しているかどうか確認したいのですが、quot; n'th level" :-)
a = { "a" => "こんにちは", "b" => "世界" }. a.count # 2 a.size # 2 a.length # 2 a = [ 10, 20 ] a.count # 2 a.size # 2 a.length # 2
では、どちらを使えばいいのでしょうか? aが複数の要素を持っているかどうかを知りたいのであれば、それは問題ではないように思えますが、本当の違いを理解しておきたいと思うのです。 これは配列にも当てはまります。 私は同じ結果を得ました。
また、ActiveRecordではcount/size/lengthの意味が異なることは承知しています。 私は今、純粋なRuby(1.92)にほとんど興味がありますが、もし誰かがARがもたらす違いについて助言してくれるなら、それもまたありがたいことです。
ありがとうございます。
解決方法は?
配列とハッシュの場合
size
のエイリアスです。
length
. これらは同義語であり、まったく同じことをします。
count
はより多機能で、要素や述語を受け取り、マッチする項目のみをカウントすることができます。
> [1,2,3].count{|x| x > 2 }
=> 1
という場合 しない を指定すると、基本的に length を呼び出すのと同じ効果が得られます。しかし、パフォーマンスには差が出る可能性があります。
からわかることは
のソースコードは、Array
というように、ほとんど同じことをやっているのです。以下は
array.length
:
static VALUE
rb_ary_length(VALUE ary)
{
long len = RARRAY_LEN(ary);
return LONG2NUM(len);
}
そして、以下は、その実装の中から該当する部分です。
array.count
:
static VALUE
rb_ary_count(int argc, VALUE *argv, VALUE ary)
{
long n = 0;
if (argc == 0) {
VALUE *p, *pend;
if (!rb_block_given_p())
return LONG2NUM(RARRAY_LEN(ary));
// etc..
}
}
のコードは
array.count
は、いくつかの余分なチェックを行いますが、最終的には全く同じコードを呼び出します。
LONG2NUM(RARRAY_LEN(ary))
.
ハッシュ (
ソースコード
の最適化されたバージョンを実装していないようです。
count
を実装しているので
Enumerable
(
ソースコード
) が使用され、これはすべての要素を繰り返し、1つずつカウントしていきます。
一般に、私は
length
(またはそのエイリアス
size
ではなく
count
というように、全部でいくつの要素があるのかを知ることができます。
一方、ActiveRecordに関しては あり この投稿をご覧ください。
関連
-
[解決済み] Rubyでランダムな文字列を生成する方法
-
[解決済み] Rubyでリモートホストの到達可能性をpingで確認する方法
-
[解決済み] マトリックスサムネーションチャレンジ
-
[解決済み] Rubyで配列を平坦化するにはどうしたらいいですか?
-
[解決済み] ネストされたクラスとモジュールにネストされたクラスはいつ使用するのですか?
-
[解決済み] Ruby で配列の順序を逆転させる
-
[解決済み] Rubyの予期しないキーワードの終了、および予期しない入力の終了
-
[解決済み】std::string length()およびsize()メンバ関数
-
[解決済み】ActiveRecord:サイズとカウントの比較
-
[解決済み] Rubyで文字列のNilまたはLength == 0をチェックする良い方法はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】rubyの1e18という数字は何を意味するのか?
-
[解決済み】Rubyで "gets "と "gets.chomp "を使用する方法
-
[解決済み】Rubyで数値の配列の合計を出すには?
-
[解決済み] Rubyのローカル変数が未定義である
-
[解決済み] nil:NilClass のための未定義のメソッド `+' (NoMethodError)
-
[解決済み] Rubyでnil値をマッピングして削除する方法
-
[解決済み] Ruby on railsで改行せずにコンソールに "puts "を使用するにはどうすればよいですか?
-
[解決済み] レイルズ・ジェネレート」を逆手に取る方法
-
[解決済み] Rubyで=~と/Θはどういう意味ですか?
-
[解決済み] Ruby 1.8.7 ハッシュを文字列に変換する