2011-08-23 32 views

Trả lời

5

Chưa thấy một built-in, nhưng google trả về một vài ví dụ:

FLibs: http://flibs.sourceforge.net/

Bàn Hash: http://burtleburtle.net/bob/hash/evahash.htmlhttp://www.cris.com/~Ttwang/tech/inthash.htm.

+0

Cảm ơn rất nhiều, tôi đã có FLib trên radar, nhưng bằng cách nào đó từ điển được cung cấp bởi nó, trượt sự chú ý của tôi. Nếu không, các tìm kiếm của tôi chủ yếu là kết thúc với một số công cụ C++, mà tôi không thực sự muốn phụ thuộc vào ... – haraldkl

+0

@Haraldkl: Hy vọng một tiêu chuẩn hóa có thể đến trong tương lai. – SOUser

+0

Tôi cũng tìm thấy một cây đỏ đen thực hiện tại https://www.myroms.org/blog/ và một số trie thực hiện tại https://github.com/ned14/nedtries, tuy nhiên tất cả họ cần một số công việc nhiều hơn để sử dụng ở Fortran, đặc biệt là trong kịch bản của tôi. Vì vậy, tôi nghĩ rằng không có thư viện chung đơn giản có thể sử dụng được. – haraldkl

4

Tôi đã tạo một từ điển trừu tượng trong fortran có thể phù hợp với nhu cầu của bạn.

Xem: https://github.com/zerothi/fdict

Về cơ bản nó cho phép bạn làm

type(dict) :: dic, dic2 
dic = ('KEY'.kv.1) 
dic = dic //('next'.kv. (/3.,5.,6./)) 
dic = dic //('string'.kv.'Hello world') 
dic2 = ('string2'.kv.'Test') 
dic = dic // ('dic2'.kvp.dic2) 

Nơi bạn có thể lưu tất cả các loại nội tại và nó có thể dễ dàng được mở rộng để chứa dữ liệu các loại khác, nó mặc định ban đầu chứa chính nó như là một giá trị khác. (dòng cuối cùng giữ từ điển dưới dạng con trỏ)

Chỉ định .kv. == key : value là bản sao sâu và .kvp. == key : pointer là bản sao tham chiếu. Bằng cách này, bạn có thể lưu trữ dữ liệu khổng lồ mà không phải sao chép dữ liệu và truy xuất con trỏ tại một số điểm sau này.

Để xây dựng trên ý tưởng, tất cả dữ liệu được lưu trữ dưới dạng con trỏ địa chỉ bằng cách sử dụng cuộc gọi transfer từ loại có nguồn gốc chứa con trỏ dữ liệu. Bằng cách này bạn lừa trình biên dịch đưa cho bạn địa chỉ của kiểu bắt nguồn từ fortran, nhưng buộc bạn phải lấy nó theo cách giống hệt nhau.
Bằng cách .kv. con trỏ của kiểu dữ liệu được cấp phát và sau đó được trỏ tới bởi vùng chứa dữ liệu, sau đó con trỏ được cấp là nullify ied và bị mất do đó buộc người dùng biết họ đang làm gì (không có rác -collector trong đó;)). Bởi .kvp. con trỏ được lưu trực tiếp mà không cần sao chép bất kỳ bộ nhớ nào.

Điều tuyệt vời là tuân thủ fortran90.

+0

Đây gần như là một liên kết chỉ trả lời. Bạn có thể viết một cái gì đó về những gì các thư viện có thể và không thể làm gì? Nó là gì? Phiên bản Fortran nào yêu cầu? –

+0

Tôi đã làm một cái gì đó tương tự cho mục đích của riêng tôi bằng cách sử dụng đa hình không giới hạn. Điều này có sử dụng đa hình tham số không? Liệu nó phụ thuộc vào 'transfer()'? –

+0

Còn bây giờ thì sao? Tôi nghĩ giải thích một phần lớn hơn của API là vô nghĩa? Không? – zeroth

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