确保列表仅包含特定值

时间:2016-11-08 20:49:41

标签: scala

如何确保列表中只包含一组特定的项目?

List[Int]

确保列表仅包含值10,20或30的函数。 我确定这是内置的我无法找到它!

3 个答案:

答案 0 :(得分:2)

的forall

您可以将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