【问题标题】:How to find the difference of subsequent number from a array/list in scala?如何从scala中的数组/列表中找到后续数字的差异?
【发布时间】:2018-12-13 11:52:16
【问题描述】:

我正在尝试从数组/列表中获取后续数字的差异。请看下面的代码

val listValue= List(10,2,6,9)

val result= Array(listValue).sliding(2).map(r => r(1) - r(0)).toList

如果我将整数值直接作为Array(10,2,6,9) 传递给数组,我会得到如下结果:8,4,3,但是当我传递参数(listValue) 时,如上所示,我收到以下错误:

错误:(18, 59) 值 - 不是 List[Int] 的成员 val result= Array(listValue).sliding(2).map(r => r(1) - r(0)).toList

如果有人可以提供帮助,将不胜感激?

【问题讨论】:

    标签: scala


    【解决方案1】:

    Array(listValue) 类型为Array[List[Int]] 所以你试图减去 2 个列表而不是 2 个整数

    你可以直接在列表上做:

    val listValue= List(10,2,6,9)
    val result= listValue.sliding(2).map(r => r(1) - r(0)).toList
    

    【讨论】:

    • 别忘了断言,listValue.size >= 2。否则,当输入本身是 1-item 列表时,sliding 可以生成 1 项 List
    • 上述map 的另一种选择是map(List(a, b) => b - a)
    • 为避免显式检查列表长度,您可以使用collect 而不是mapval result = listValue.sliding(2).collect{case l::r::Nil => Math.abs(r - l)}.toList。我根据您的预期结果集(所有正值)输入了Math.abs
    • @ygor 你的建议不起作用,你需要使用map{case List(a, b) => b - a}
    • @Shane 的评论似乎是最优雅(也是正确)的答案
    猜你喜欢
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 2021-06-04
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多