如何确保列表中只包含一组特定的项目?
List[Int]
确保列表仅包含值10,20或30的函数。 我确定这是内置的我无法找到它!
答案 0 :(得分:2)
您可以将forall
与包含有效或合法元素的集合一起使用,并且您希望在列表中看到这些元素。
list.forall(Set(10, 20, 30).contains) //true means list only contains 10, 20, 30
您无需使用contains
方法Set
扩展Int => Boolean
。您可以像设置函数一样使用
list forall Set(10, 20, 30)
您可以使用过滤器过滤掉不在给定列表中的元素。您可以再次使用Set as function作为Set extends Function。
list.filter(Set(10, 20, 30)).nonEmpty //true means list only contains 10, 20 and 30
Collect采用部分功能。如果你喜欢模式匹配,只需使用collect
list.collect {
case 10 => 10
case 20 => 20
case 30 => 30
}.nonEmpty //true means list only contains 10, 20 and 30
Scala REPL
scala> val list = List(10, 20, 30, 40, 50)
list: List[Int] = List(10, 20, 30, 40, 50)
scala> list forall Set(10, 20, 30)
res6: Boolean = false
答案 1 :(得分:1)
当列表中不包含必需项时,您的问题未指定您希望发生什么。
如果列表中的所有项目都符合您的条件,则以下内容将返回true,否则为false:
val ints1: List[Int] = List(1, 2, 3, 4, 5, 6, 7)
val ints2: List[Int] = List(10, 10, 10, 10)
ints1.forall(i => List(10, 20, 30).contains(i)) // false
ints2.forall(i => List(10, 20, 30).contains(i)) // true
以下内容将返回一个List,其中只包含符合条件的项目:
val ints1: List[Int] = List(10, 20, 30, 40, 50, 60, 70)
val ints2: List[Int] = List(10, 10, 10)
ints1.filter(i => List(10, 20, 30).contains(i)) // List(10, 20, 30)
ints2.filter(i => List(10, 20, 30).contains(i)) // List(10, 10, 10)
答案 2 :(得分:0)
如果您只是想确定列表中的所有值是否为#34; legal",请使用 forall :
def isLegal(i: Int): Boolean = ??? // e.g. is it 10, 20, or 30
val allLegal = list forall isLegal
如果您想减少列表以便仅保留合法值,请使用过滤器:
val onlyLegalValues = list filter isLegal
请注意,Set[Int]
计为Int => Boolean
函数,因此您可以使用它来代替isLegal
方法:
val isLegal = Set(10, 20, 30)
val allLegal = list forall isLegal
val onlyLegalValues = list filter isLegal