[Tôi đến từ nền C #, nhưng câu trả lời nên được áp dụng]
[Nó không quan trọng lắm nhưng tôi giả sử mục cuối cùng là ConcảnHashMap <C, Integer> ]
Bạn có một hàm f loại A -> (B -> (C -> int))
Nếu đó thực sự là những gì bạn cần, tôi không có câu trả lời sẵn sàng. Nhưng có lẽ, có một hàm f loại (A x B x C) -> int sẽ đủ cho mục đích của bạn.
Sự khác biệt giữa hai trường hợp là, trường hợp đầu tiên là lười hơn, nhiều chức năng hơn, thanh lịch hơn và có thể có chức năng "áp dụng một phần" xung quanh. Ví dụ, bạn có một một (loại A) phần tử, bạn áp dụng một đến f và có một hàm g loại (B -> (C -> int)) để vượt qua xung quanh, gửi đến các phương pháp, bất cứ điều gì. Tuy nhiên, nó hơi cồng kềnh và thêm một chút mã để khởi tạo đúng chức năng.
Thứ hai là háo hức và kém thanh lịch, nhưng có thể dễ viết mã và dễ hiểu hơn. Tất cả những gì bạn cần làm là có một lớp chung Triple <A, B, C> , ghi đè Equals () và GetHashCode () để nó có ngữ nghĩa giá trị, (hai trường hợp sẽ được coi là bằng nhau nếu chúng có các phần tử bằng nhau) và khai báo ConcảnHashMap là từ Triple đến Integer . Chi phí rõ ràng nhất phải trả là bạn cần có sẵn các yếu tố A , B , C để tạo một thể hiện của Triple và thực hiện tra cứu.
Chỉnh sửa: Nếu mục cuối cùng thực sự là ConcảnHashMap <C, Integer> , thì lớp chung của bạn sẽ có các trường A , B và Integer và ánh xạ sẽ từ Triple <A, B, Integer> đến C
A
,B
vàC
? Sẽ dễ dàng hơn để trả lời nếu tôi có thể hiểu ý nghĩa của việc lồng ba cấp của bạn có bản đồ ở đó.