[SCALA] 이웃와 비교하여 목록 항목을 그룹화
SCALA이웃와 비교하여 목록 항목을 그룹화
자신의 이웃 값을 기준으로 그룹으로 값 목록을 그룹화의 가장 우아한 방법은 무엇입니까?
I 가지고 더 넓은 문맥 라인들의리스트를 구비하고, 그 요구가 문단으로 그룹화한다. 나는 두 선 사이의 수직 차이가 임계 값보다 낮은 경우, 그들은 같은 단락에 있다고 말할 수 있어야합니다.
나는 다르게이 문제를 해결 결국,하지만 난 여기에 올바른 솔루션에 대해 궁금하네요.
case class Box(y: Int)
val list = List(Box(y=1), Box(y=2), Box(y=5))
def group(list: List[Box], threshold: Int): List[List[Box]] = ???
val grouped = group(list, 2)
> List(List(Box(y=1), Box(y=2)), List(Box(y=5)))
나는 GROUPBY () 살펴 보았다,하지만 한 번에 하나 개의 요소로 작업 할 수 있습니다. 또한 관여 미리 계산하여 차이) (슬라이딩한다는 방법을 시도했지만, 그것은 원래의 집합의 요소를 검색하는 어색하게된다.
해결법
-
==============================
1.그것은 하나의 라이너입니다. 독자들에게 숙제로 남긴다 유형을 일반화.
그것은 하나의 라이너입니다. 독자들에게 숙제로 남긴다 유형을 일반화.
int 치의 절대 차이보다는 라인을 사용하고 혼란을 방지하기 위해 간격.
val zs = List(1,2,4,8,9,10,15,16) def closeEnough(a:Int, b:Int) = (Math.abs(b -a) <= 2) zs.drop(1).foldLeft(List(List(zs.head))) ((acc, e)=> if (closeEnough(e, acc.head.head)) (e::acc.head)::acc.tail else List(e)::acc) .map(_.reverse) .reverse // List(List(1, 2, 4), List(8, 9, 10), List(15, 16))
또는 약간의 효율 증가를위한 두 라이너
val ys = zs.reverse ys.drop(1).foldLeft(List(List(ys.head))) ((acc, e)=> if (closeEnough(e, acc.head.head)) (e::acc.head)::acc.tail else List(e)::acc) // List(List(1, 2, 4), List(8, 9, 10), List(15, 16))
from https://stackoverflow.com/questions/37816015/grouping-list-items-by-comparing-them-with-their-neighbors by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스칼라 : 왜 단위로 지능을 변환 할 수 있습니까? (0) | 2019.11.23 |
---|---|
[SCALA] 하나 개의 컬럼이 다른 컬럼의 구성원 인 경우 스파크 dataframe를 필터링하는 방법 (0) | 2019.11.23 |
[SCALA] 스칼라를 사용하여 소수를 찾을 수 있습니다. 개선하는 데 도움이 (0) | 2019.11.23 |
[SCALA] 원시 스칼라 타입을 갖는 구현 방법 (0) | 2019.11.23 |
[SCALA] 왜 scaladoc 방법 서명이 잘못입니까? (0) | 2019.11.23 |