Scala, сделай мой цикл более функциональным

Я пытаюсь уменьшить степень написания Scala (2.8) как Java. Вот упрощение проблемы, с которой я столкнулся. Можете ли вы предложить улучшения моих решений, которые станут «более функциональными»?

Преобразуйте карту

val inputMap = mutable.LinkedHashMap(1->'a',2->'a',3->'b',4->'z',5->'c')

, удалив все записи со значением 'z' и индексируя символы по мере их появления

Первая попытка

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
  }
}

Вторая попытка (не намного лучше, но использует неизменяемую карту и '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
    }
  }
}
5
задан Pengin 27 December 2010 в 18:22
поделиться