如何在Scala中实现Python的issuperset()

时间:2016-08-30 14:05:52

标签: scala scala-collections

抱歉新手问题。我尝试用Scala类

实现Pythons issuperset()

Python示例:

 weighted_fruits_set = {"banana", "orange","apple"}
 check = {"banana"}
 weighted_fruits_set.issuperset(check)

Python回答:"True"

我的Scala代码,我尝试containssuperset列表中查找case class weightedFruits,并检查"banana"中是否存在字符weightedFruits.name

object Learn extends App {


  case class weightedFruits(name:List[String], weight:Double) {
override def toString = s"name: ${name.mkString("<", ",", ">")}, weight: $weight\n"
 }

 var weightedFruitsList = new scala.collection.mutable.ListBuffer[weightedFruits]()

 weightedFruitsList += ( 
                     weightedFruits(List("banana","orange"),180),
                     weightedFruits(List("banana","orange","apple"),170),                                 
                     weightedFruits(List("feijoa","fig"),201),
                     weightedFruits(List("banana","apple","melon"),165)
                     )

val check = weightedFruits(List("banana"),200)                       

weightedFruitsList += check                       

val item = weightedFruitsList(1)

val bol:Boolean = item.name.contains(check.name)

println("item: "+item)
println("check: "+check)
println("bool: "+bol)

}

我的代码输出为false(但必须为true):

item: name: <banana,orange,apple>, weight: 170.0

check: name: <banana>, weight: 200.0

bool: false

感谢您的帮助。我真的希望我的解释清楚

2 个答案:

答案 0 :(得分:4)

在我看来,其他目前的答案比他们需要做的更多。如果集合A是集合B的子集,则A的所有元素都在B中。因此,如果我们从A中删除B的所有元素,则应该没有任何内容。所以

val a = List("banana") 
val b = List("banana", "orange","apple")
val c = List("tomato") 

(a diff b).isEmpty                                //> true
(c diff b).isEmpty                                //> false

(如果“set”包含重复项,则不指定应该发生什么)

如果您实际使用的是集合而不是列表,则此操作已在标准库中

def subsetOf(that: GenSet[A]): Boolean
  

测试此集是否是另一个集的子集。设置为       测试。如果此集合是该集合的子集,即如果每个集合,则返回true       该集合的元素也是

的元素

请参阅Scaladoc here

因此,您可以使用.toSet将“套装”转换为实际套装,并使用此

答案 1 :(得分:2)

def isSuperSet[A](a: Set[A])(b: List[A]) = b.forall(a.contains(_))
如果truea

的超集,

上面的函数会返回b

将水果列表转换为Set(仅限),然后使用此功能。