Ruby sayısı, büyüklüğü, uzunluğu...çok fazla seçenek?
Bu konuda kesin bir cevap bulmak için görünmüyor olabilir ve bunu anladığımdan emin olmak istiyorum "n'inci seviye" :-)
a = { "a" => "Hello", "b" => "World" } a.count # 2 a.size # 2 a.length # 2 a = [ 10, 20 ] a.count # 2 a.size # 2 a.length # 2
Yani hangisi kullanılır? Eğer varsa birden fazla öğe varsa bilmek istiyorum, ama gerçek farkı anladım emin olmak istiyorum bir önemi yok. Bu diziler için de geçerlidir. Aynı sonuçları elde edebilirsiniz.
Ayrıca, ActiveRecord farklı anlamları/sayısı farkındayım. Saf Yakut çoğunlukla ilgileniyorum (1.92) şu an ama eğer kimse fark AR yapar üzerine düşmek istiyorsa bu da mutluluk duyacağız.
Teşekkürler!
CEVAP
Diziler ve karma size
length
bir diğer adıdır. Eş anlamlı ve aynısını yaparlar.
count
çok yönlü kullanım - element ya da bir yüklem alabilir ve bu maç sadece bu öğeleri Sayın.
> [1,2,3].count{|x| x > 2 }
=> 1
Senin durumundayokbir parametre temelde uzunluğu çağıran aynı etkiye sahiptir saymak sağlar. Performans farkı olabilir.
Hemen hemen aynı şeyi yapıyorlar source code for Array dan görebilirsiniz. Burada array.length
uygulanması için C kodu:
static VALUE
rb_ary_length(VALUE ary)
{
long len = RARRAY_LEN(ary);
return LONG2NUM(len);
}
Ve burada array.count
uygulanması ile ilgili kısım:
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
fazladan birkaç denetler ama sonunda yaptığı aramalar aynı kod için kod: LONG2NUM(RARRAY_LEN(ary))
.
Karma (source code) diğer taraftan yok gibi görünüyor uygulamak için kendi optimize edilmiş sürümü count
Bu uygulama Enumerable
(source code) kullanılır, hangi yineler tüm unsurları sayar ve onları tek tek.
Genel olarak ise toplam kaç tane olduğunu bilmek istiyorsanız length
(veya 17* *alias) count
yerine kullanmayı tavsiye ederim.
Öte yandan ActiveRecord ile ilgili olanlar varönemli farklılıklar. gelen mesaja bakın:
Farklı tarayıcılarda bir URL uzunluğu ...
Neden bu dize uzunluğu daha fazla kara...
Parola uzunluğu en fazla empoze etmeli...
Ruby: birden fazla karma anahtarları s...
Sıyırma yeni satır olmadan Ruby birden...