Scala 确保列表仅包含特定值

Scala 确保列表仅包含特定值,scala,Scala,如何确保列表仅包含一组特定的项目 List[Int] 确保列表仅包含值10、20或30的函数。 我肯定这是我自己做的,我找不到 福尔 您可以将forall与包含有效或合法元素的集合一起使用,这些元素是您希望在列表中看到的 list.forall(Set(10, 20, 30).contains) //true means list only contains 10, 20, 30 集合就是函数 您不需要使用contains方法作为Set扩展Int=>Boolean。可以像函数一样使用Set

如何确保列表仅包含一组特定的项目

List[Int]
确保列表仅包含值10、20或30的函数。 我肯定这是我自己做的,我找不到

福尔 您可以将
forall
与包含有效或合法元素的集合一起使用,这些元素是您希望在列表中看到的

list.forall(Set(10, 20, 30).contains) //true means list only contains 10, 20, 30
集合就是函数 您不需要使用
contains
方法作为
Set
扩展
Int=>Boolean
。可以像函数一样使用Set

list forall Set(10, 20, 30)
滤器 您可以使用过滤器过滤掉不在给定列表中的元素。同样,您可以在Set扩展函数时使用Set as函数

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
福尔 您可以将
forall
与包含有效或合法元素的集合一起使用,这些元素是您希望在列表中看到的

list.forall(Set(10, 20, 30).contains) //true means list only contains 10, 20, 30
集合就是函数 您不需要使用
contains
方法作为
Set
扩展
Int=>Boolean
。可以像函数一样使用Set

list forall Set(10, 20, 30)
滤器 您可以使用过滤器过滤掉不在给定列表中的元素。同样,您可以在Set扩展函数时使用Set as函数

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

如果您只是想确定列表中的所有值是否都是“合法的”,请对所有值使用

def isLegal(i: Int): Boolean = ??? // e.g. is it 10, 20, or 30
val allLegal = list forall isLegal
val onlyLegalValues = list filter isLegal
如果要精简列表,以便只保留合法值,请使用过滤器

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

如果您只是想确定列表中的所有值是否都是“合法的”,请对所有值使用

def isLegal(i: Int): Boolean = ??? // e.g. is it 10, 20, or 30
val allLegal = list forall isLegal
val onlyLegalValues = list filter isLegal
如果要精简列表,以便只保留合法值,请使用过滤器

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

当列表中不包含必需的项目时,您的问题没有指定希望发生什么

如果列表中的所有项目都符合您的条件,则以下内容将返回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
以下内容将返回一个列表,其中仅包含符合条件的项目:

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)

当列表中不包含必需的项目时,您的问题没有指定希望发生什么

如果列表中的所有项目都符合您的条件,则以下内容将返回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
以下内容将返回一个列表,其中仅包含符合条件的项目:

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)

问题是如何验证列表仅包含值
10
20
30
。要做到这一点,我们需要多做一步,编写类似于
list.filterNot(Set(10,20,30)).contains()).isEmpty
,以验证该
集中不包含的元素列表是否为空。问题是如何验证该列表仅包含值
10
20
,和
30
。要做到这一点,我们需要做一个额外的步骤,编写一些类似于<代码>列表的文件。FieltNoT(set(10, 20, 30)。包含(i))。ISWORL/<代码>以验证未包含在<<代码> set <代码>中的元素的列表是空的。如果您认为问题已经解决,请考虑接受答案。如果没有,请向帮助将答案提高到可接受水平的人员发表评论。它对每个人都有帮助。您想确保您只能将某些项目添加到列表中吗?列表存在时只能包含某些项,或者检查给定列表在给定时间点是否包含某些项。3个选项有3个不同的答案。如果你认为你的问题已经解决了,请考虑接受一个答案。如果没有,请向帮助将答案提高到可接受水平的人员发表评论。它对每个人都有帮助。您想确保您只能将某些项目添加到列表中吗?列表存在时只能包含某些项,或者检查给定列表在给定时间点是否包含某些项。3个选项,3个不同的答案。