2011-11-04 29 views
5

Harita/sortBy/findIndex ve bunun yerine Arrays için bazı diğer ilgili işlevler (en azından tamsayılarla indekslenenler) gibi fonksiyonlar yazmanın mümkün olduğunu görebiliyorum. Bu, standart kütüphanede herhangi bir yerde mi yapıldı, yoksa kendi başıma mı dönmem gerekecek?Haskell Haritası/sortBy/findIndex vb. Listeler yerine Diziler için

Yerinde güncelleme için programımda bir dizi kullanmam gerekiyor, ancak yukarıdaki liste işlevlerinden bazılarını kullanmak istiyorum. En iyi çözüm iki arasında dönüş mü yapıyor?

(I baktığımız diziler Data.Array.IArray gelmektedir. Ayrıca bu işlevi uygulayan başka dizi kütüphanesini kullanmak mutluyum.)

+0

"Yerinde güncelleme için programımda bir dizi kullanmam gerekiyor" - yerinde güncelleme bir uygulama detayıdır ... neden * gerçekten * dizilere ihtiyacınız var? Alan kısıtlamaları? Zaman kısıtlayıcıları? Yerinde güncellemeye bağlı bir algoritma uygulamaya çalışıyorum? –

+0

Haklısın, bu çok kötü bir ifadeydi. Öğeyi verilen bir indekste kolayca güncelleyebilmek istiyorum. Tabii ki, bir liste için bunu yapmak için bir işlev yazabilirim, ama genel olarak verimsiz ve varsayılan bir uygulama bulamıyorum, bu yüzden "Haskellish" görünmüyor. "Haskellish" veri yapısının liste benzeri bir işlevsellik sağladığı, ancak indeksle verimli bir şekilde oluşturulduğunu merak ediyordum. –

+0

[Data.Sequence] 'ı (http://hackage.haskell.org/packages/archive/containers/latest/doc/html/Data-Sequence.html) kontrol etmelisiniz. –

cevap

5

sana bir göz tavsiye vector ve vector-algorithms paketleri. Hem değişebilir hem de değişmez varyantlarda, Int-indeksli dizilerde birçok ortak operasyonun çok verimli uygulamalarını içerirler. (Control.Monad itibaren)

+0

Harika, aradığım şey buydu. Ayrıca, Data.Sequence'ı da buldum, bunların nasıl karşılaştırıldığını biliyor musunuz? –

+0

@CoreyStaten aynı beyin dalgasında olmalıyız. Ben sadece [Data.Vector Data.Sequence değiştirir mi?] Sordu (http://stackoverflow.com/questions/8013275/does-data-vector-replace-data-sequence) –

+1

@CoreyStaten: Data.Sequence bir Data.Vector bir "gerçek" dizi ise parmak ağacı. Bu şekilde, Data.Vector sabit zaman indekslemesini destekler ve genellikle daha az yüke sahip olurken Data.Sequence, uçlarda sabit zaman manipülasyonunu destekler ve kuyruk benzeri işlemler için daha uygundur. – hammar

4

fmap çeşit Functor tip sınıfını destekler bir şey üzerinde çalışır map genel bir versiyonu gibi. Array bunu destekler, böylece map yerine fmap dizisini kullanabilmeniz gerekir.

Hammar'ın dediği gibi, vektör ve vektör algoritmaları, dizine dizilmiş dizileri göz önünde bulundurmanız gerekiyorsa, problemi çözmek için muhtemelen daha iyi bir yoldur.

İlgili konular