giải pháp khác (nhận xét rằng đây là những cơ sở-index = 1):
index_of(Value, List) ->
Map = lists:zip(List, lists:seq(1, length(List))),
case lists:keyfind(Value, 1, Map) of
{Value, Index} -> Index;
false -> notfound
end.
index_of(Value, List) ->
Map = lists:zip(List, lists:seq(1, length(List))),
case dict:find(Value, dict:from_list(Map)) of
{ok, Index} -> Index;
error -> notfound
end.
Tại một số điểm, khi danh sách bạn vượt qua để các chức năng này có đủ dài, chi phí xây dựng Danh mục bổ sung hoặc dict trở nên quá đắt. Nếu bạn có thể tránh thực hiện việc xây dựng mỗi khi bạn muốn tìm kiếm danh sách bằng cách giữ danh sách ở định dạng đó bên ngoài các chức năng này, bạn sẽ loại bỏ phần lớn chi phí.
Sử dụng từ điển sẽ băm các giá trị trong danh sách và giúp giảm thời gian tra cứu chỉ mục thành O (log N), vì vậy tốt hơn nên sử dụng nó cho các danh sách lớn, đơn lẻ.
Nói chung, tùy bạn, người lập trình, tổ chức dữ liệu của bạn thành các cấu trúc phù hợp với cách bạn sẽ sử dụng chúng. Tôi đoán là sự vắng mặt của index_of được xây dựng sẵn là để khuyến khích xem xét như vậy. Nếu bạn đang thực hiện tra cứu một khóa - đó thực sự là những gì index_of() là - sử dụng một từ điển. Nếu bạn đang thực hiện tra cứu đa khóa, hãy sử dụng danh sách các bộ dữ liệu có danh sách: keyfind() et al. Nếu danh sách của bạn quá lớn, một giải pháp ít đơn giản hơn có lẽ là tốt nhất.
Nếu bạn định truy cập các mục theo chỉ mục thì tốt hơn là xem mô-đun mảng. – Christian