有一个列表可以说:[1,2,3]。我试图找出每两个连续数字的差,然后将它们相加。
例如:上面的列表将给出:(2-1)+(3-2)= 2。我正在寻找一种不使用循环的解决方案。 代码:
val e = List((0,true), (2,true), (7,true))
val w = e.foldLeft(e(0)){ (z1,z2) => z2._1 - z1._1 }
任何人都可以提供一个建议,说明以上代码为何错误吗?
谢谢您的时间。
答案 0 :(得分:1)
首先,您需要使用 map
将元组列表转换为整数列表library(lubridate)
df1 %>%
arrange(ID, mdy(purchase_date)) %>%
group_by(ID) %>%
summarise(FIRST_PURCHASE_DATE = first(purchase_date),
LAST_PURCHASE_DATE = last(purchase_date))
产生:
def sum(list: List[Int]) = {
list.sliding(2).toList.map {
case List(v1, v2) => v2 - v1
}.sum
}
val e1 = List(0 -> true, 2 -> true, 7 -> true)
val res1 = sum(e1.map(_._1))
val e2 = List(1 -> true, 2 -> true, 3 -> true)
val res2 = sum(e2.map(_._1))
答案 1 :(得分:0)
可以用 e.foldLeft(e(0)){(z1,z2)=>(z2._1-z1._1,z2._2)} ._ 1
原因是,您正在尝试更改不允许的元素类型。
答案 2 :(得分:0)
e.unzip._1.sliding(2).map{case List(i, j) => j-i}.sum
scala> val e1 = List(0 -> true, 2 -> true, 7 -> true)
e1: List[(Int, Boolean)] = List((0,true), (2,true), (7,true))
scala> e1.unzip._1.sliding(2).map{case List(i, j) => j-i}.sum
res190: Int = 7
scala> val e2 = List(1 -> true, 2 -> true, 3 -> true)
e2: List[(Int, Boolean)] = List((1,true), (2,true), (3,true))
scala> e2.unzip._1.sliding(2).map{case List(i, j) => j-i}.sum
res191: Int = 2
scala>