【问题标题】:Filtering a sequence based on item length根据项目长度过滤序列
【发布时间】:2019-01-09 19:19:26
【问题描述】:

我有这个序列users,它有很多字符串。我想要做的是根据字长过滤序列。这可以通过说filtered_users = users.filter(_.length == x) (x = wanted word length) 来完成

但是,我想在过滤列表中添加一个 char 较长和 char 较短的单词。我是手动写的

filtered_users2 = users.filter(_.length == x+1) 
filtered_users3 = users.filter(_.length == x-1)
filtered_users ++= (filtered_users1 ++ filtered_users2)

我可能还需要在 seq 中添加更长/更短的 2 个字符,所以我正在寻找一种方法来遍历用户并过滤掉所有过长或过短的名称。我使用 for 循环创建了这个

var filter = Seq[String]()
for (i <- max(0, x - difference) to (x + difference)) {
filter ++= users.filter(_.length == i)
} 

其中字长xdifference 是预先给出的。但是,如果 seq 很长,我不想通过它太多次。我正在寻找的是一种只通过用户序列一次并返回过滤列表的实现。

显然,

val filtered_users = users.filter(_.length == x || _.length == x - 1 || _.length == x + 1)

没用。

【问题讨论】:

    标签: scala filtering sequence


    【解决方案1】:

    如果您在匿名函数中多次使用_,它将被视为多个输入参数(第一个_ 将是第一个参数,第二个将是第二个参数,依此类推)。如果你想多次使用一个参数,你必须给它命名:

    val x = 3
    val difference = 1
    
    users.filter(u => u.length >= x - difference && u.length <= x + difference)
    

    【讨论】:

      猜你喜欢
      • 2020-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-15
      相关资源
      最近更新 更多