나는 iterator가 많은 항목을 가지고 있으므로 groupBy에 대한 Iterable로 변환 할 수 없으며 memmory에서 모든 결과를 소트하고 싶지 않습니다. 하지만 모든 객체가 groupBy 필드에 의해 정렬된다는 것을 알고 있으므로 정렬 된 반복자에 대해 groupBy를 구현할 수 있습니다. 이미이 작업을 수행하는 스칼라 컬렉션에 몇 가지 메소드가 있습니까?스칼라에 groupBy의 반복 버전이 있습니까?
3
A
답변
4
내 솔루션 :
def iterativeGroupBy[T, B](iterO: Iterator[T])(func: T => B): Iterator[List[T]] = new Iterator[List[T]] {
var iter = iterO
def hasNext = iter.hasNext
def next = {
val first = iter.next()
val firstValue = func(first)
val (i1,i2) = iter.span(el => func(el) == firstValue)
iter = i2
first :: i1.toList
}
}
3
이상한 groupBy
것을 이것에 대해 Iterator
에없는,하지만 어떻게? (이 하나 가 같은 반복자 Iterable
와 모든 시간을 생산해야한다는 주어진 보장 결코 비록)
val it = Iterator(1, 2, 3)
new Iterable[Int] { def iterator = it }.groupBy(_ % 2 == 0)
작동하는 것 같다.
+1
이것은 메모리 내 솔루션이지만 대부분의 SQL 데이터베이스와 동일한 방식으로 무한 크기 컬렉션을 그룹화하려는 경우 ... – yura
관련 문제
- 1. 반복 알고리즘의 반복 버전이 느립니다.
- 2. 스칼라에 람다 함수가 있습니까?
- 3. 스칼라에 게임 엔진이 있습니까?
- 4. 하스켈의 '어쩌면'함수가 스칼라에 내장되어 있습니까?
- 5. 스칼라에 명명 된 생성자가 있습니까?
- 6. 스칼라에 부분 문자열 프록시가 있습니까?
- 7. "call-cc"패턴이 스칼라에 있습니까?
- 8. Objective-C의 'andand'모나드 버전이 있습니까?
- 9. 스칼라에 대한 정적 테스트
- 10. 스칼라에 개미를 구성하십시오.
- 11. 유지 mixin 스칼라에
- 12. 스칼라에 관한 질문
- 13. 아랍어에 buddypress 버전이 있습니까?
- 14. MsStkPrp.dll의 x64 버전이 있습니까
- 15. BN_bin2bn에 파이썬 버전이 있습니까?
- 16. NavigableMap의 스칼라 버전이 있습니까?
- 17. pyUIQ의 최신 버전이 있습니까?
- 18. Scriptaculous의 jQuery 버전이 있습니까?
- 19. Mercurial 문제 버전이 있습니까?
- 20. getcwd의 wchar_t 버전이 있습니까?
- 21. DelphiFeeds.com의 .NET 버전이 있습니까?
- 22. 논리 스칼라에 && 피연산자를 해결하는 방법
- 23. 스칼라에 액터가있는 바이너리 검색 구현?
- 24. 스칼라에 배열 배열을 만드는 방법
- 25. mozart/oz의 새 버전이 있습니까?
- 26. IE7.js의 jquery 버전이 있습니까?
- 27. 몇 개의 JVM 버전이 있습니까?
- 28. 파이썬의 Mechanize의 스칼라 버전이 있습니까?
- 29. JPA 3과 같은 버전이 있습니까?
- 30. 파일 이름에 CSS 버전이 있습니까?
이 코드는 다른 콜렉션에서'groupBy'와 다른 점을 유의해야합니다. 어쨌든 "실제"그룹은 전체 컬렉션을 탐색해야하므로 인 메모리 솔루션을 사용할 수 없다고 생각합니다. – Rogach
그러나 "모든 객체가 groupBy 필드로 정렬되었습니다"라고 가정하면 두 방법이 동일합니다. – yura
아. 귀하의 질문에 그것을 놓쳤습니다. – Rogach