【问题标题】:Filtering a list by a function in Scala通过Scala中的函数过滤列表
【发布时间】:2013-11-29 02:43:28
【问题描述】:

我需要按集合的结果过滤列表。 例如这有效:

(List(1, 2, 3, 4, 5, 6, 7, 8, 9) filter (_!= 1))

输出列表(2,3,4,5,6,7,8,9) 但是我需要通过两个返回集合的函数过滤这个列表(例如它返回 Set(1,2))并且当前列表需要被这些函数过滤。

任何想法如何做到这一点? 我已经尝试过使用 && 但它不起作用

提前致谢。

【问题讨论】:

  • 不清楚你想做什么。这是什么意思“通过两个返回集合的函数过滤这个列表”?给出给定输入和预期输出的示例。

标签: list scala filter


【解决方案1】:

试试这个,

scala> val raw = Set(1,2)
raw: scala.collection.immutable.Set[Int] = Set(1, 2)

scala> val column = Set(3,4)
column: scala.collection.immutable.Set[Int] = Set(3, 4)

scala> val l = (1 to 9).toList
l: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)

scala> l.filterNot(x => raw(x) || column(x))
res9: List[Int] = List(5, 6, 7, 8, 9)

根据@4e6 的评论,

scala> l.filterNot(raw ++ column)
res9: List[Int] = List(5, 6, 7, 8, 9)

【讨论】:

  • 代码中没有递归。可以尝试使用点符号而不是空格分隔的方法调用。这可能会使编译器感到困惑。
  • 既然Set[A]扩展了A => Boolean的功能,你可以做1 to 9 filterNot (row ++ col)
  • @user2947615 是的,这个想法是因为Set 是一个函数,您可以将它用作filter 参数。 ++ 只是在应用于函数之前连接集合。
猜你喜欢
  • 2021-12-25
  • 2021-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-05
  • 2016-11-15
  • 2011-05-27
  • 1970-01-01
相关资源
最近更新 更多