Nasıl Dizi yapıyor#bir blok geçirildiğinde iş mi?
Bir sorun array.sort{ |x,y| block }
tam olarak nasıl çalışır, bu yüzden bunu kullanmak için nasıl bir anlayış yaşıyorum?
Ruby documentation bir örnek:
a = [ "d", "a", "e", "c", "b" ]
a.sort #=> ["a", "b", "c", "d", "e"]
a.sort { |x,y| y <=> x } #=> ["e", "d", "c", "b", "a"]
CEVAP
Örnek
a.sort
olur denk
a.sort { |x, y| x <=> y }
Bildiğiniz gibi, sıralama bir dizi, ihtiyacınız karşılaştırır elementleri (Eğer şüphe, sadece denemek için uygulamak herhangi bir sıralama algoritması kullanmadan herhangi bir karşılaştırma yok <
, >
, <=
veya >=
).
Verdiğiniz blok gerçekten sort
algoritması tarafından iki öğe karşılaştırmak için çağrılacak bir fonksiyon.x
y
her zaman giriş dizisi, yürütme sırasında sort
algoritması tarafından seçilmiş bazı unsurları olacaktır.
sort
algoritma bu karşılaştırma/blok 18* *yöntemi: ihtiyacını karşılayacak işlev üstlenecek
- eğer x -1 iade < y
- x = y ise 0 döndürür
- x ^ eğer iade 1 . y
Yeterli bir karşılaştırma sağlamak için başarısızlık/engelle tanımsız olan dizi neden olur işlevi.
Şimdi neden olduğunu anlamak gerekir
a.sort { |x, y| x <=> y }
ve
a.sort { |x, y| y <=> x }
siparişlerini aynı dizi döndürür.
Siz karşılaştırma sınıfların herhangi birinde<=>
işlevi uygulamak Tate Johnson eklendi ne üzerinde durmak için, aşağıdaki kazanırsınız
- Sen de görülebilir modülü
Comparable
sizin sınıf hangi otomatik olarak tanımlamak için aşağıdaki yöntemleri:between?
,==
,>=
,<
,<=
ve>
. - Sınıfınızın örneklerini şimdi
sort
(bağımsız değişken olmadan yani) varsayılan çağırma kullanarak sıralanabilir.
Not <=>
yöntem zaten verilen her yerde yapar anlamda ruby'nin standart kütüphane (Bignum
, Array
, File::Stat
, Fixnum
, String
, Time
, vb...).
nasıl Dizi yapıyor.prototip.dilim.() A...
Nasıl JavaScript bir dizi boş?...
Nasıl bir dizi belirli bir değeri vars...
Nasıl Java iki dizi bir arada olabilir...
Nasıl JavaScript iki boyutlu bir dizi ...