抱歉新手问题。我尝试用Scala类
实现Pythonsissuperset()
Python示例:
weighted_fruits_set = {"banana", "orange","apple"}
check = {"banana"}
weighted_fruits_set.issuperset(check)
Python回答:"True"
我的Scala代码,我尝试contains
从superset
列表中查找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
感谢您的帮助。我真的希望我的解释清楚
答案 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 该集合的元素也是
的元素
因此,您可以使用.toSet
将“套装”转换为实际套装,并使用此
答案 1 :(得分:2)
def isSuperSet[A](a: Set[A])(b: List[A]) = b.forall(a.contains(_))
如果true
是a
的超集,上面的函数会返回b
将水果列表转换为Set
(仅限),然后使用此功能。