Po pierwsze, przepraszam za kulawe pytanie. Czytam `Scala dla niecierpliwych” religijnie i próbuje rozwiązać wszystkie pytania ćwiczeń (i robi jakieś minimalne poszukiwań)Używanie funkcji `map` na mapie w Scala
Tło: Pytanie ćwiczenie idzie tak - Konfiguracja mapę cen dla wielu Gizmos, który pożądasz. Następnie przygotuj drugą mapę z tymi samymi kluczami, a ceny z 10% zniżką.
Niestety, w tym momencie większość części skaladoku wciąż jest dla mnie zagadkowa, ale rozumiem, że funkcja mapy Map
przejmuje funkcję i zwraca inną mapę po zastosowaniu funkcji (chyba?) - def map[B](f: (A) ⇒ B): HashMap[B]
. Próbowałem googling, ale nie mogliśmy dostać wiele przydatnych wyników dla map function for Map in scala
:-)
moje pytanie: Jako próbę w moim wariancie 3, nie używając map
funkcję do tego celu żadnego sensu czy powinienem trzymać się wersji 2, który faktycznie rozwiązuje mój problem.
Kod:
val gizmos:Map[String,Double]=Map("Samsung Galaxy S4 Zoom"-> 1000, "Mac Pro"-> 6000.10, "Google Glass"->2000)
//1. Normal for/yield
val discountedGizmos=(for ((k,v)<-gizmos) yield (k, v*0.9)) //Works fine
//2. Variation using mapValues
val discGizmos1=gizmos.mapValues(_*0.9) //Works fine
//3. Variation using only map function
val discGizmos2=gizmos.map((_,v) =>v*0.9) //ERROR : Wrong number of parameters: expected 1
Wow. To ma sens. Wielkie dzięki za poświęcenie czasu, aby wyjaśnić wyraźnie. –
Warto zauważyć, że 'mapValues' tworzy widok na istniejącej mapie, podczas gdy' map' tworzy całą nową mapę. – Daenyth