Chỉnh sửa: Đã thêm thực tế, danh sách được sắp xếp và nhận ra 'trùng lặp' là gây hiểu nhầm, thay thế bằng 'dư thừa' trong tiêu đề.Xóa các mục thừa, cách scala
Tôi có danh sách các mục nhập được sắp xếp cho biết giá trị sản xuất trong một khoảng thời gian nhất định. Các mục nhập chỉ ra cùng một giá trị chính xác vào một thời điểm sau sẽ không thêm thông tin nào và có thể bỏ đi một cách an toàn.
case class Entry(minute:Int, production:Double)
val entries = List(Entry(0, 100.0), Entry(5, 100.0), Entry(10, 100.0), Entry(20, 120.0), Entry(30, 100.0), Entry(180, 0.0))
Thử nghiệm với các chức năng thu thập scala 2.8, cho đến nay tôi có thực hiện công tác này:
entries.foldRight(List[Entry]()) {
(entry, list) => list match {
case head :: tail if (entry.production == head.production) => entry :: tail
case head :: tail => entry :: list
case List() => entry :: List()
}
}
res0: List[Entry] = List(Entry(0,100.0), Entry(20,120.0), Entry(30,100.0), Entry(180,0.0))
Bất kỳ ý kiến? Tôi có bỏ lỡ một số phép thuật scala không?
Tâm trí bạn, 'foldRight' là tối ưu với' Danh sách'. Ưu tiên 'foldLeft' với nó.Điều này ngược lại với 'Haskell', trong đó' Right' được ưu tiên hơn 'Trái' vì không nghiêm ngặt. –
ok, nhưng sau đó tôi cần phải đảo ngược kết quả. Chạy một thử nghiệm nhanh chóng đặt foldRight hơi trước foldLeft + ngược lại, vì vậy tôi muốn nói foldRight là rõ ràng hơn. – andersbohn