用Scala實現集合中相鄰元素間的差值

徽滬一郎發表於2015-01-03

歡迎轉載,轉載請註明出處,徽滬一郎。

概要

程式碼這東西,不寫肯定不行,新學Scala不久,將實際遇到的一些問題記錄下來,日後也好查詢。

今天講的是如何計算同一集合中元素兩兩之間的差值,即求開始集合(a,b,c,d)中(b-a,c-b,d-c)

解法

val l1 = 1 to 10 toList
val l2 = l1.tail
l1.zip(l2).map(p=>(p._2 - p._1)

上述程式碼即可求出兩兩差值。程式碼含義稍作解釋:

  1. tail表示一個集合中除首元素外的剩餘元素,也是一個集合。
  2. zip將兩個集合組成一個數值對集合,比如原來有兩個集合分別是(a,b,c,d), (1,2,3,4),使用zip之後,形成((a,1),(b,2),(c,3),(d,4))
  3. map操作中的p._1和p._1表示tuple中的第一個元素和第二個元素

衍生

既然講了首元素和剩餘元素,肯定要講到其對立面。分別引述如下

  • head|tail  head表示頭元素,tail表示除head之外的剩餘元素集合
  • init|last    last表示尾元素, init表示除尾元素之外的剩餘元素集合

 

相關文章