Поиск значений последних значений ключа в HashMap в Scala - как написать его в функциональном стиле - PullRequest
0 голосов
/ 14 января 2011

Я хочу найти хэш-карту после ключа и, если ключ найден, дать мне последнее значение найденного значения ключа. Вот мое решение до сих пор:

import scala.collection.mutable.HashMap

object Tmp extends Application {
  val hashmap = new HashMap[String, String]
  hashmap += "a" -> "288 | object | L"

  def findNameInSymboltable(name: String) = {
    if (hashmap.get(name) == None)
      "N"
    else
      hashmap.get(name).flatten.last.toString
  }

  val solution: String = findNameInSymboltable("a")
  println(solution) // L

}

Может быть, есть функциональный стиль, который избавит меня от накладных расходов на locs?

Ответы [ 2 ]

5 голосов
/ 14 января 2011

Не могу заставить ваш пример работать. Но, может быть, что-то подобное сделает эту работу?

hashmap.getOrElse("a", "N").split(" | ").last

"getOrElse" по крайней мере спасет вас от проверки if / else.

0 голосов
/ 14 января 2011

Если ваш "N" предназначен для отображения, а не для вычислений, вы можете перетащить его вокруг того факта, что в None нет таких "a" до отображения:

val solution = // this is an Option[String], inferred
  hashmap.get("a"). // if None the map is not done
    map(_.split(" | ").last) // returns an Option, perhaps None

Что еще можно написать:

val solution = // this is an Option[String], inferred
  for(x <- hashmap.get("a"))
    yield {
      x.split(" | ").last
    }

И наконец:

println(solution.getOrElse("N"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...