2011-01-14 3 views
0

キーの後にハッシュマップを検索したいのですが、キーが見つかった場合は、見つかった値を返します。キー。ここに私の解決策は、これまでのところです:スカラのHashMapでキーの最後の値を見つける - 機能的なスタイルで書く方法

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のオーバーヘッドを保存することの機能的なスタイルはありますか?

+0

なぜドン」 Seqを地図に保存していますか? – Raphael

答えて

5

あなたの例がうまく動作しませんでした。しかし、このようなものが仕事をするだろうか?

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

「getOrElse」は、少なくともif/elseチェックを保存します。あなたの"N"場合

+0

Scalaの敏感さが大好きです。 – David

+0

うん、この種の文法的な砂糖を愛し、何か非常に有用なことを学んだ。 –

0

は、表示するためのものであるため、計算のために、あなたはNoneには、このような"a"が表示されるまで存在しないという事実ouroundドラッグすることができません。

alse書き込むことができます
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")) 
関連する問題