2011-11-04 19 views
5

Tôi có thể thấy rằng có thể viết các hàm như map/sortBy/findIndex và một số hàm khác liên quan đến List cho mảng thay vì (ít nhất là các chỉ mục theo số nguyên.) Việc này có được thực hiện ở bất kỳ nơi nào trong thư viện chuẩn hay tôi có cần phải cuộn của riêng mình không?Bản đồ Haskell/sortBy/findIndex vv cho các mảng thay vì danh sách

Tôi cần sử dụng một mảng trong chương trình của mình để cập nhật tại chỗ, nhưng cũng có một số vị trí tôi muốn sử dụng một số chức năng danh sách ở trên trên đó. Chuyển đổi qua lại giữa hai giải pháp tốt nhất?

(Các mảng Tôi đã nhìn vào là từ Data.Array.IArray. Tôi cũng rất vui khi được sử dụng bất kỳ thư viện mảng khác mà thực hiện chức năng này.)

+0

"Tôi cần sử dụng mảng trong chương trình của mình để cập nhật tại chỗ" - cập nhật tại chỗ là chi tiết triển khai ... tại sao bạn * thực sự * cần mảng? Không gian hạn chế? Hạn chế thời gian? Đang cố triển khai thuật toán phụ thuộc vào bản cập nhật tại chỗ? –

+0

Bạn nói đúng, đã bị nói xấu. Tôi muốn có thể dễ dàng cập nhật phần tử tại một chỉ mục đã cho n. Tất nhiên, tôi có thể viết một chức năng để làm điều này cho một danh sách, nhưng nó không hiệu quả nói chung và tôi không thể tìm thấy một thực hiện mặc định, do đó, nó không có vẻ "Haskellish". Tôi đã tự hỏi cấu trúc dữ liệu "Haskellish" là chức năng được liệt kê như thế nào, nhưng với tính năng cập nhật theo từng chỉ mục được xây dựng hiệu quả. –

+0

bạn nên kiểm tra [Data.Sequence] (http://hackage.haskell.org/packages/archive/containers/latest/doc/html/Data-Sequence.html). –

Trả lời

5

tôi khuyên bạn nên có một cái nhìn tại vectorvector-algorithms gói. Chúng chứa các triển khai rất hiệu quả của nhiều hoạt động phổ biến trên các mảng được lập chỉ mục Int, trong cả hai biến thể có thể thay đổi và không thay đổi.

+0

Tuyệt vời, đây là những gì tôi đang tìm kiếm. Tôi cũng đã tìm thấy Data.Sequence, bạn có biết những so sánh này như thế nào không? –

+0

@CoreyStaten chúng ta phải ở trên cùng một sóng não. Tôi chỉ yêu cầu [Data.Vector thay thế Data.Sequence?] (Http://stackoverflow.com/questions/8013275/does-data-vector-replace-data-sequence) –

+1

@CoreyStaten: Data.Sequence được thực hiện như một cây ngón tay, trong khi Data.Vector là một mảng "true". Như vậy, Data.Vector hỗ trợ lập chỉ mục thời gian liên tục và thường sẽ có ít chi phí hơn, trong khi Data.Sequence hỗ trợ thao tác thời gian không đổi ở cuối và phù hợp hơn cho các hoạt động giống như hàng đợi. – hammar

4

fmap (từ Control.Monad) giống như phiên bản chung của map hoạt động trên mọi thứ hỗ trợ lớp loại Functor. Array hỗ trợ, vì vậy bạn có thể sử dụng fmap thay vì map cho mảng.

Như hammar nói, vectơ và vector-thuật toán có lẽ là một cách tốt hơn để tiếp cận vấn đề nếu bạn cần xem xét các mảng được lập chỉ mục.

Các vấn đề liên quan