Я, имеющие следующую итератора:Итерация в Scala: проверка предыдущих значений
val it = Iterator(("a",5),("a",3),("a",2),("a",1),("b",8),("b",2),("b",1),("c",1))
Значения внутри отсортированные во-первых, первый элемент (строка), а во-вторых, от второго (Int). Как я могу получить первые 2 значения из каждой буквы. Таким образом, результат должен быть в этом примере:
Iterator(("a",5),("a",3),("b",8),("b",2),("c",1))
Это может быть сделано с GroupBy:
it.toList.groupBy(_._1).mapValues(_.take(2)).values.flatten.toIterator
, но я хотел бы увидеть решение, которое проходит через каждый элемент и проверить предыдущий «строка» элемент, и если его то же самое и «счет» меньше 2, то это значение yield
.
Edit:
Следуя логике @jwvh ответа: Как это может быть обобщена принять первые значения N вместо первого 2?
спасибо! Я попытался «вывести» результаты в цикле 'while':' while (lit.hasNext()) {yield lit.next()} ', но он не работает. Есть ли способ сделать это? –
или это 'for (elem <- lit) yield elem' считается хорошей практикой? –
Приносим извинения за комментарии. как это можно было бы обобщить на N первых значений вместо первых 2? –