List 过滤列表:基本的事情
你知道为什么这个程序没有给出预期的答案吗 谢谢List 过滤列表:基本的事情,list,scala,List,Scala,你知道为什么这个程序没有给出预期的答案吗 谢谢 case u::v => u==v 这里,u是Int类型,而v是List[Int]类型。他们不可能平等 这里,u是Int类型,而v是List[Int]类型。它们不能相等。您需要检查的文档。它采用的构造函数参数是(hd:B,tl:List[B]) 在您的情况下,u变为hd,v是List[In]。而做u==v就像做hd.equals(list)一样,结果是错误的 scala> val l= List(List(1,2),List(3,3)
case u::v => u==v
这里,u
是Int
类型,而v
是List[Int]
类型。他们不可能平等
这里,
u
是Int
类型,而v
是List[Int]
类型。它们不能相等。您需要检查的文档。它采用的构造函数参数是(hd:B,tl:List[B])
在您的情况下,u
变为hd
,v
是List[In]
。而做u==v
就像做hd.equals(list)
一样,结果是错误的
scala> val l= List(List(1,2),List(3,3),List(1),List(1,2,3),List(4,4,4,4))
l: List[List[Int]] = List(List(1, 2), List(3, 3))
scala> l.filter(_ match{
case u::v => Some(u) == v.headOption
case _ => false
})
res8: List[List[Int]] = List(List(3, 3), List(4, 4, 4, 4))
以上是一种惯用的方法。您需要查看的文档。它采用的构造函数参数是
(hd:B,tl:List[B])
在您的情况下,u
变为hd
,v
是List[In]
。而做u==v
就像做hd.equals(list)
一样,结果是错误的
scala> val l= List(List(1,2),List(3,3),List(1),List(1,2,3),List(4,4,4,4))
l: List[List[Int]] = List(List(1, 2), List(3, 3))
scala> l.filter(_ match{
case u::v => Some(u) == v.headOption
case _ => false
})
res8: List[List[Int]] = List(List(3, 3), List(4, 4, 4, 4))
以上是一种惯用的方法。如果您可能处理任意长度的列表,并且希望只过滤到所有元素都相同的列表,则另一种编码方法将非常有用,即:
l.filter(ls => !ls.isEmpty && ls.forall(_ == ls.head))
(
!ls.isEmpty
片段假定您希望排除空列表)另一种编码方法是,如果您可能处理任意长度的列表,并且希望只过滤到所有元素都相同的列表,则该方法将非常有用:
l.filter(ls => !ls.isEmpty && ls.forall(_ == ls.head))
(
!ls.isEmpty
片段假定您希望排除空列表)如果您想从子列表中提取前两个元素并进行比较,则在案例中需要两个:
:
l.filter {
case u :: v :: _ => u == v
case _ => false
}
如果要确保子列表的所有元素相等,可以使用for all
:
l.filter {
case h :: Nil => false // if you want to exclude single elements
case h :: r => r.forall(_ == h)
case _ => false
}
如果要从子列表中提取前两个元素并进行比较,则在案例中需要两个:
:
l.filter {
case u :: v :: _ => u == v
case _ => false
}
如果要确保子列表的所有元素相等,可以使用for all
:
l.filter {
case h :: Nil => false // if you want to exclude single elements
case h :: r => r.forall(_ == h)
case _ => false
}
谢谢你的回答,终于可以使用u::v::或带有选项;尽管如此,我还是喜欢使用元组:(a,b,c);然而,我更喜欢使用元组:(a,b,c)。