Próbuję zmniejszyć zakres, w jakim piszę Scala (2.8) jak Java. Oto uproszczenie problemu, z którym się zetknąłem. Czy możesz zaproponować ulepszenia moich rozwiązań, które są "bardziej funkcjonalne"?Scala, spraw by moja pętla była bardziej funkcjonalna
Transform mapę
val inputMap = mutable.LinkedHashMap(1->'a',2->'a',3->'b',4->'z',5->'c')
odrzucając wszelkie wpisy o wartości 'Z' i indeksowania znaki są one spotykane
Najpierw spróbuj
var outputMap = new mutable.HashMap[Char,Int]()
var counter = 0
for(kvp <- inputMap){
val character = kvp._2
if(character !='z' && !outputMap.contains(character)){
outputMap += (character -> counter)
counter += 1
}
}
drugą szansę (nie wiele lepsze , ale używa niezmiennej mapy i "foreach")
var outputMap = new immutable.HashMap[Char,Int]()
var counter = 0
inputMap.foreach{
case(number,character) => {
if(character !='z' && !outputMap.contains(character)){
outputMap2 += (character -> counter)
counter += 1
}
}
}
ładniejszych rozwiązanie jest bardzo miłe! Spełnia wszystkie wymagania w zwarty i zrozumiały sposób. (Osobiście mapowałbym przed filtrowaniem, ale jest to niemal banalny szczegół.) –