API belgelerinde, List
'da bir sort()
yöntemi olduğunu görüyorum, ancak bir parametre için neye ihtiyaç duyduğunu anlayamıyorum. Mevcut ihtiyaç çok basit bir düz alfa karşılaştırması içindir.Dart'ta dizelerin bir listesini nasıl sıralayabilirim?
cevap
Soru için teşekkürler! Böyle Strings listesini sıralayabilirsiniz:
main() {
var fruits = ['bananas', 'apples', 'oranges'];
fruits.sort();
print(fruits);
}
Yukarıdaki kod baskılar: Bir değer döndürmez
apples, bananas, oranges
Bildirimi sort()
söyledi. Listeyi yeni bir liste oluşturmadan sıralar.
print(fruits..sort());
fazla kontrol için, kendi karşılaştırma mantığı tanımlayabilirsiniz: sıralayıp aynı çizgide yazdırmak istiyorsanız, yöntem kaskadlar kullanabilirsiniz. İşte meyveleri fiyatlara göre sıralamak için bir örnek.
main() {
var fruits = ['bananas', 'apples', 'oranges'];
fruits.sort((a, b) => getPrice(a).compareTo(getPrice(b)));
print(fruits);
}
Bakalım neler oluyor burada.
Bir liste, bir isteğe bağlı parametresi olan bir yöntemine sahiptir: a Comparator. Bir Karşılaştırıcı, bir typedef
veya işlev takma adıdır.
: Dokümanlar
int Comparator(T a, T b)
: Bu durumda, şöyle bir işlev için bir takma ad b, a, b'ye eşitse sıfır ve a, b'den büyükse pozitif bir tamsayıdır. aşağıdaki gibi
sort
geçirilen
(a, b) => foo(a, b)
yılında, genel olarak, Seth'in ayrıntılı cevaba sadece bir nokta eklemek için, işlev foo
bir tamsayı sonucunu cevap vermelidir:
- bir eğer < b, sonuç < 0,
- olmalıdır, a = b ise sonuç = 0 ve olmalıdır
- bir if> b sonuç
Comparable
s olmalıdır> 0.
, hem a
ve b
olmalıdır.
Bugünden sonra, sadece list.sort() yapabilmeniz gerekir. Sıralama yönteminin argümanı artık isteğe bağlı ve varsayılan olarak, öğelerin kendileriyle compareToTo çağrılan bir işleve dönüşür. Dize Karşılaştırılabilir olduğundan, Şimdi Çalışmalı.
Bir karşılaştırıcı işlevi gerektirmeyen List sort() yöntemi hiç düzeltildi mi? Yoksa regresyon var mıydı? . Ben Ubuntu 12.04 üzerinde Dart'ı 0.2.6.0_r15355 kullanarak ve aşağıdaki sonuçlar alıyorum: sort [3,1,2] .sort() == null ve [ 'a', 'c', 'b'] () == null. – devdanke
Oops! Dart dizisini sıralamaktaydı. Ama sort() işlevi void :-(döndürür. Yani "print ([3,1,2] .sort()) '" outputs "null". Bu durumda Dart devleri akıcı bir programlama stili uygulamıyor, keşke yapabilseydim çünkü o zaman derhal sort() sonucunu kullanabilirsiniz. – devdanke
Tembel sıralama. Sonuç IQueryable.
Özel karşılaştırıcı bir argüman olarak geçirilebilir.
import 'package:queries/collections.dart';
void main() {
var fruits = ["grape", "passionfruit", "banana", "mango",
"orange", "raspberry", "apple", "blueberry"];
var sorted = new Collection(fruits)
.orderBy((fruit) => fruit.length)
.thenBy((fruit) => fruit);
for(var fruit in sorted) {
print(fruit);
}
}
Çıktı:
mango
banana
orange
blueberry
raspberry
passionfruit
- 1. VIM'de dizelerin bir listesini nasıl değiştirebilirim?
- 2. DropDownListFor - dizelerin basit bir listesini görüntüler
- 3. Python zaman değerleri listesini nasıl sıralayabilirim?
- 4. Nesnelerin listesini özelliklerine göre nasıl sıralayabilirim?
- 5. Bir Oracle rolüne verilen ayrıcalıkların listesini nasıl sıralayabilirim?
- 6. Bir dizenin tüm öğeleri için dizelerin bir listesini arama
- 7. Numaralı dizelerin listesini hızlı bir şekilde başlatmak için?
- 8. JavaScript'te bir listeyi nasıl sıralayabilirim?
- 9. Dizelerin listesi nasıl eklenir?
- 10. NSDictionary nasıl sıralayabilirim?
- 11. Riak'taki verileri nasıl sıralayabilirim?
- 12. Belirli bir siparişle bir listeyi nasıl sıralayabilirim?
- 13. Bu dizelerin bir parçası tarafından dizelerin dizisini sırala
- 14. Dizelerin bir listesini tek bir birleştirilmiş dizeye dönüştürmenin en hızlı yolu?
- 15. Bir DataGridTemplateColumn'u WPF Toolkit DataGrid'de nasıl sıralayabilirim?
- 16. Okumadan önce bir dizindeki dosyaları nasıl sıralayabilirim?
- 17. Dizelerin bir listesini girip, tamsayıların sayısını, yüzenleri ve diğerlerini döndüren bir program oluşturmam gerekiyor.
- 18. QTableWidget'i kendi kodumla nasıl sıralayabilirim?
- 19. ES6 `Set` i nasıl sıralayabilirim?
- 20. Scala'daki [Int] nesnelerini nasıl sıralayabilirim?
- 21. Javascript'te Json verilerini nasıl sıralayabilirim?
- 22. Java ile tarihe göre bir dizindeki dosyaları nasıl sıralayabilirim?
- 23. Python'daki Dizelerin SHA1 bilgisini
- 24. Sokete dizelerin gönderilmesi
- 25. Sızdırmazlıktaki uzun dizelerin kesilmesinin önlenmesi
- 26. Dizelerin dönüşü dizisi
- 27. Bir desenle eşleşen dizelerin bir süzgeci nasıl filtrelenir
- 28. Dizelerin bir vektöründen benzersiz bir isim kümesi nasıl oluşturulur?
- 29. Python'da csv'den kodlanmış dizelerin veri çerçevesi nasıl okunur?
- 30. LINQ ile birden çok alanı nasıl sıralayabilirim?
teşekkürler! Şikayet ettiğim için özür dilerim, ancak yukarıdakilerin çok yönlülüğünü takdir etmeye çalışırken, sezgisel ya da önceki dil deneyimi ile aynı çizgiyi bulamıyorum. Kare ahşap bir faresi olan ve bu eşyaların bir kısmının uzun gri sakallı biri var mı? :) –
Bu garip bir tarihsel eserdir. Karşılaştırıcı isteğe bağlı olmalıdır. Eskiden olduğu gibi, isteğe bağlı parametre sözdizimini bir süre sonra değiştirdik ve bu da dahil olmak üzere tüm parametreleri bir süreliğine opsiyonel hale getirmemizi sağladı. Bunu düzeltmek ve henüz tekrar isteğe bağlı hale getirmek için bir şansımız olmadı. – munificent
Teşekkürler @munificent, yakında düzeltileceğini duyduğumuza sevindim. Hataya bakın http://code.google.com/p/dart/issues/detail?id=1235 –