Witam mam mapę tak:Znalezienie klucza w mapie, biorąc pod uwagę wartość
[this:0, is:1, a:2, file:3, anotherkey:4, aa:5]
Chciałabym znaleźć „s key
zważywszy na value
z mapą. Na przykład, jeśli podana jest wartość 5
, muszę zwrócić z mapy aa
.
Czy to możliwe?
Nie, Twój kod jest interesujący :), ale zabójca wydajności, ponieważ odtwarzasz inną mapę. Istnieje metoda, aby znaleźć wpis na mapie, biorąc pod uwagę jego wartość, odpowiednia odpowiedź została podana przez epidemię dawno temu: myMap.find {it.value == 5} .key – ARA
@ARA w rzeczywistości do wielokrotnego użytku rozwiązanie crazy4groovy będzie szybsze tak długo, jak odwrócona kolekcja nie jest odtwarzana za każdym razem. Nie powinieneś iterować nad listą O (n), kiedy możesz użyć mapy w O (logN). Oczywiście wydajność powinna i tak zająć miejsce do czytania - i jeśli zrobi się to dobrze, rozwiązanie crazy4groovy jest prawdopodobnie bardziej czytelne ... Jednak to nie jest strasznie "Groovy" :) –
@Bill: Tak, powiedziałem Zabójcą wydajności jest odtworzenie mapy za każdym razem, tak jak w przykładzie, który używa lambdy do odtworzenia jej w locie. Oczywiście, jeśli mapa nie zostanie odtworzona przy każdym połączeniu i utrzymywana, będzie to o wiele szybsze niż wykonywanie iteracji. Taki jest cel mapy. :) I myślę, że mapa jest określana jako O (1) nie O (log (n)), a btree będzie O (log (n))? – ARA