2
我有一個takeWhile
的用例,但是我希望在謂詞爲true後保留固定數量的項目。我也試圖把它寫成儘可能通用的類型的集合。因此,像:在Scala中編寫帶有偏移量的通用takeWhile
def takeWhileWithOffset[A, Iter[_] <: Iterable[A]](iter: Iter[A], p: A => Boolean, offset: Int)
我選擇Iterable
爲界,是因爲希望它與Stream
工作。但是我很難搞清楚如何做這個工作。如果我使用的是嚴格收集,如果偏移量不是正數,我可以使用dropRight
。但是Iterable
沒有dropRight
。
正面的情況更棘手。我可以使用sliding
來有效抓取未來物品,然後在takeWhile
終止後使用init
和lastOption
。但是Iterable
沒有init
和lastOption
。
那麼,什麼是棘手的是,我希望我的方法偷懶,但採取的是迭代的項目可以作爲一個嚴格的收集要處理的事實的優點 - 但只有的takeWhile
終止。有沒有辦法做到這一點?
現在我覺得啞了,哈哈。作爲一種獎勵,冒着感覺笨拙的風險,那麼負偏移呢? – acjay
我知道你的意思。你也可以用一個捕捉的計數器摺疊或拍攝,但是跨度很大。另外,如果這很重要,你必須測試懶惰。也就是說,這是完全懶惰的,你不必擔心。 –