Hi Tôi có một bản đồ như thế này:tìm chìa khóa trong một bản đồ, do giá trị
[this:0, is:1, a:2, file:3, anotherkey:4, aa:5]
Tôi ước gì có thể tìm thấy những key
's trao value
của bản đồ. Ví dụ: nếu giá trị 5
được cung cấp, tôi cần trả lại aa
từ bản đồ.
Điều đó có khả thi không?
Không, mã của bạn là thú vị :) nhưng sát thủ hiệu suất vì bạn tạo lại một Bản đồ khác. Có một phương pháp để tìm một mục Map cho giá trị của nó, câu trả lời chính xác đã được đưa ra bởi epidemian thời gian dài trước đây: myMap.find {it.value == 5} .key – ARA
@ARA thực sự để sử dụng lặp đi lặp lại giải pháp của crazy4groovy sẽ nhanh hơn miễn là bộ sưu tập ngược không được tái tạo mỗi lần. Bạn không nên lặp qua danh sách O (n) khi bạn có thể sử dụng bản đồ tại O (logN). Tất nhiên, hiệu suất nên có một chỗ ngồi trở lại để dễ đọc anyway - và nếu được thực hiện ngay giải pháp crazy4groovy có lẽ là dễ đọc hơn ... Tuy nhiên nó không phải là terribly "Groovy" :) –
@ Bill: Có, những gì tôi nói là kẻ giết người hiệu suất là tạo lại bản đồ mỗi lần như ví dụ sử dụng lambda để tạo lại nó ngay lập tức. Tất nhiên nếu bản đồ không được tái tạo trên mỗi cuộc gọi và được duy trì, điều này sẽ nhanh hơn nhiều so với lặp lại. Đó là mục đích của Bản đồ. :) Và tôi nghĩ Bản đồ được gọi là O (1) không phải O (log (n)), một btree sẽ là O (log (n))? – ARA