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)。