Dart veri yapıları ve algoritmalar için iyi mi?
Evet. Tipli ve sınıf tabanlıdır, biçim olarak Java'ya ya da C#'a yakındır; bu yüzden nullable bir next alanı olan bir Node<T> sınıfı tam olarak göründüğü şeydir, dart:collection da çoğu standart kütüphaneden fazlasını kapsar. Bilmeye değer iki şey var: çekirdek SDK'da öncelik kuyruğu yok ve bir Map ya da Set literal'i, ekleme sırasını hatırlayan bir LinkedHashMap ya da LinkedHashSet olur; bu çıktı için kullanışlıdır, ama sıralı bir map ile aynı sözü vermez.
Hangi Dart sınıfı hangi veri yapısına karşılık gelir?
List dinamik bir dizi ve senin stack'indir; Map ve Set varsayılan olarak ekleme sırasını koruyan hash tablolarıdır; dart:collection şunları ekler: Queue (DoubleLinkedQueue seçmedikçe bir ListQueue, yani dairesel bir tampon), LinkedListEntry sınıfını genişleten girdiler için LinkedList ve kendini ayarlayan sıralı ağaçlar olarak SplayTreeMap ile SplayTreeSet. Heap için Dart ekibinin package:collection paketi PriorityQueue sunar. Trie'leri ve grafları kendin yazarsın.
Dart'ta öncelik kuyruğu var mı?
Çekirdek SDK'da yok. dart:collection kuyruklarda, bağlı listelerde ve splay ağaçlarında durur; PriorityQueue ise Dart ekibinin bakımını yaptığı ama kendin eklemen gereken bir paket olan package:collection içinde yer alır. Bu da bir Dart mülakatının senden heap yazmanı istemesini makul kılar; ikinci adımda bir tane yazarsın.
Splay ağacı nedir ve SplayTreeMap ne zaman kullanılmalı?
Splay ağacı kendini ayarlayan bir ikili arama ağacıdır: her erişim, dokunduğu düğümü köke taşır; bu yüzden yakın zamanda kullanılan anahtarlara yeniden ulaşmak hızlıdır ve işlemlerin maliyeti her tek çağrıda garanti değil, amortize O(log n)'dir. Anahtarlara sıralı olarak, en küçük ya da en büyük anahtara veya firstKeyAfter ve lastKeyBefore ile bir değerin iki yanındaki en yakın anahtara ihtiyacın olduğunda SplayTreeMap kullan. İkinci adımda kurduğun AVL ağacı öbür yaklaşımı izler: yüksekliğini kesin olarak sınırlı tutmak için her değişiklikte yeniden dengelenir.
Bu yoldaki hangi kurslar Dart ile anlatılmıyor?
Üç kurs: Python ile anlatılan dinamik programlama ve Python mülakat serisi, C++ ile anlatılan bit işlemleri. Adımlardan sonra listelenirler ve her birinin bağlantısı onu kendi dilinde açar. Dart'ta bir memo bir List ya da bir Map olur; toRadixString(2) de bir int değerini ikili olarak yazdırır, bir maskenin gerçekte ne tuttuğunu kontrol etmenin en hızlı yolu.
Bu yola başlamadan önce Dart bilmem gerekiyor mu?
En azından sınıflar, generic'ler, listeler, map'ler ve null güvenliği. Bunlar sana yeniyse, Coddy'nin Dart kursu seni önce oraya ücretsiz olarak getirir ve bu yol onun bittiği yerden devam eder.