在Scala中,如何检查泛型HashMap是否包含特定的键?

问题描述:

我试图做类似下面在Scala中,如何检查泛型HashMap是否包含特定的键?

def defined(hash: HashMap[T, U], key: [T) { 
    hash.contains(key) 
    } 

以上不编译,因为我的语法不正确。是否有可能检查未知类型的HashMap是否包含给定的键?

+1

从今天起,您已成为http://stackoverflow.com/tags/scala/topusers上的第8位全职顶级访问者。可能你可以回答你自己的问题吗?这是一个真正的建议,我发现我通过回答关于SO的问题学到了更多。除非你在竞争中成为顶级提问者...... – huynhjl

+0

所以你说你的策略是优化每单位时间消耗的知识积累? – deltanovember

+1

是的,我认为是。 – huynhjl

除了流浪“[”我不认为你有语法错误。这和你需要在你的大括号“=”之前,或者该函数不会返回布尔值。而且由于只有一个表情,无需括号...

import scala.collection.mutable._ 

object Main extends App { 

    def defined[T,U](hash: HashMap[T, U], key: T) = hash.contains(key) 

    val m = new HashMap[String,Int] 
    m.put("one", 1) 
    m.put("two", 2) 
    println(defined(m, "one")) 
    println(m contains "two") 
    println(defined(m, "three")) 
} 
+0

哦,是的,我添加了方法的类型参数。 –

也许是你的解决办法是这样的:

def detect[K,V](map : Map[K,V], value : K ) : Boolean = { 
    map.keySet.contains(value) 
} 

您申报方法名称后的通用参数,然后使用他们作为你参数的类型。

+0

为什么要调用'keySet'? – axel22

有没有必要定义自己的;因为所有Map秒,所有HashMap S IN尤其是PartialFunction S,你可以使用isDefinedAt方法:

scala> val map = HashMap(1->(), 2->()) 
map: scala.collection.mutable.HashMap[Int,Unit] = Map(1 ->(), 2 ->()) 

scala> map.isDefinedAt(2) 
res9: Boolean = true 

scala> map.isDefinedAt(3) 
res10: Boolean = false 

还有就是contains方法,特别是对MapLike对象,但做同样的事情。