windowed
연속된 원소 size개짜리 슬라이딩 윈도우로, 각 윈도우는 직전 윈도우보다 step개 뒤에서 시작합니다.
강의
chunk는 시퀀스를
겹치지 않는 조각으로 자릅니다. 조각이 겹쳐야 하는 순간 —
이동 평균, "한도를 넘긴 연속 세 번의 측정값", 각 원소를 이웃과 함께
보는 모든 질문 — 경계를 조심스레 따지는 인덱스 루프를 손으로 짜게
됩니다. windowed(size)는 그 루프를 지연 연산자로 만든
것입니다. 연속된 원소 size개씩을 담은
List를 내놓으며, 윈도우 사이는
step(기본값 1)만큼 앞으로 미끄러집니다.
두 개의 손잡이로 온 가족을 커버합니다. step은 윈도우의
간격을 정합니다. step < size는 서로 겹치게,
step == size는 chunk와 똑같이
타일처럼 깔리게, step > size는 사이를 띄워
샘플링하게 만듭니다. partial: true는 꼬리의 짧은
윈도우를 버리는 대신 남겨 둡니다 — 실제로
chunk(n)은 바로
windowed(n, step: n, partial: true)이며,
둘은 하나의 구현을 공유합니다.
Dart 고유의 추가 기능입니다(FxTS에는 대응물이 없습니다) — 이름은
Kotlin의 windowed에서 왔고, RxDart 독자에게는
bufferCount(size, startEvery)로 익숙할 것입니다. 다른
모든 fxdart 연산자처럼 지연 평가됩니다. 윈도우는 pull 한 번에 하나씩
구체화되므로, 끝없는 소스와도
concurrent와도
잘 조합됩니다.
데모 1 · 이동 평균
데모 2 · step과 partial 손잡이
직접 해 보기
연습: 지출 한도를 넘긴 3일 연속 구간을 찾아 표시해 보세요.