我有一個這樣的迭代器:
Iterator(List(1, 2012), List(2, 2015), List(5, 2017), List(7, 2020))
我正在嘗試回傳一個迭代器,但值略有變化。必須將所有 5 的倍數的值添加到前一行。所以結果是:
Iterator(List(1, 2012), List(2, 4032), List(7, 2020))
我嘗試過使用以下方法:
val a = Iterator(List(1, 2012), List(2, 2015), List(5, 2017), List(7, 2020))
val aTransformed = a.reduce((x,y) => if (y(0)%5 == 0) List(x(0),x(1) y(1)) else x)
但它給了我最終的價值val aTransformed: List[Int] = List(1, 4029)
我該怎么做才能獲得所需格式的迭代器?有沒有一種方法可以只檢查上一行/下一行而不將其全部折疊成一個最終值?
我知道這可以通過將迭代器轉換為串列、遍歷、變異并轉換回迭代器來實作,但是有更優雅的解決方案嗎?
編輯澄清:
5的連續倍數將被整理成一個和
前任:
Iterator(List(1, 2012), List(2, 2015), List(5, 2017), List(10, 2025))
應該成為
Iterator(List(1, 2012), List(2, 6057))
uj5u.com熱心網友回復:
由于我們不能直接從 中獲取最后一個元素Iterator,我們需要一個緩沖區來存盤最后一個元素,計算后,我們檢查緩沖區狀態并將最終結果附加到它。
在這里,我附加了一個空Iterator[List[Int]]元素以簡化檢查步驟。
def convert(xs: Iterator[List[Int]]): Iterator[List[Int]] = {
val res = (xs Iterator(List[Int]())).foldLeft(Iterator[List[Int]](), List[Int]())((x, y)=> {
if (y.nonEmpty && y(0) % 5 == 0) {
if (x._2.nonEmpty) {
(x._1, List(x._2(0), x._2(1) y(1)))
} else {
(x._1, y)
}
} else {
if (x._2.nonEmpty) {
(x._1 Iterator(x._2), y)
} else {
(x._1, y)
}
}
})
res._1
}
測驗
scala> val xs1 = Iterator(List(1, 2012), List(2, 2015), List(5, 2017), List(7, 2020))
val xs1: Iterator[List[Int]] = <iterator>
scala> val xs2 = Iterator(List(1, 2012), List(2, 2015), List(5, 2017), List(10, 2025))
val xs2: Iterator[List[Int]] = <iterator>
scala> convert(xs1)
val res44: Iterator[List[Int]] = <iterator>
scala> res44.toList
val res45: List[List[Int]] = List(List(1, 2012), List(2, 4032), List(7, 2020))
scala> convert(xs2)
val res47: Iterator[List[Int]] = <iterator>
scala> res47.toList
val res48: List[List[Int]] = List(List(1, 2012), List(2, 6057))
uj5u.com熱心網友回復:
以下是獲得預期結果的可能方法。我還沒有檢查所有的可能性..
val interResult = itr.foldLeft((List.empty[List[Int]], List.empty[Int])) { (acc, curr) =>
if(curr.size != 2)
acc
else if(acc._2.isEmpty)
(acc._1, curr)
else
if(curr.headOption.exists(_ % 5 == 0))
(acc._1, List(acc._2.head, acc._2.last curr.last))
else
(acc._1 : acc._2, curr)
}
interResult._1 : interResult._2
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/424396.html
