当前位置:  开发笔记 > 编程语言 > 正文

如何使用模式匹配在scala中获取一个nonEmpty列表?

如何解决《如何使用模式匹配在scala中获取一个nonEmpty列表?》经验,为你挑选了2个好方法。

我正在case x :: Nil => ...尝试确保列表是非空的,但它只匹配单个元素列表.如何使用模式匹配获取非空列表?

更新
我很抱歉,似乎我失去了一些东西,有一个特殊的场景使用匹配内部,

object AccountResult{
  def unapply(account: AccountResult): Option[(String, List[String])] = ???
}

//ignore accountResult define please 
accountResult match {
  case AccountResult(_, x :: _) => ... 
}

如何匹配accountResult哪个List [String](x :: _)值不是Nil?然后获取匹配的List [String]值



1> Shadowlands..:

而不是仅指定空列表Nil,指定可以是任何列表的内容,例如:

case x :: tail => ... // tail is a local variable just like x, holding the tail of the list

或者干脆:

case x :: _ => ...

如果你不关心或不会使用尾巴.

这些模式将匹配具有至少一个元素的任何列表(而不是根据现有模式恰好一个元素).同样,模式:

case x :: y :: the_rest => ...

将匹配任何列表至少包含两个元素.

编辑(回复您的评论):

您可以使用" @" 分配案例模式中的变量.因此,对于您可能已经看过的(典型用法)示例:

case acc@AccountResult(_, x :: tail) => ... // do something with 'acc'

或者,根据您的评论匹配您正在寻找的用法:

case AccountResult(_, phone@(x :: tail)) => ... // do something with 'phone'



2> Nyavro..:

要检查列表是否为空,您可以通过以下方式匹配模式:

list match {
   case Nil => false
   case _ => true
}

要么

list match {
  case Nil => false
  case x::xs => true  
}

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有