일별 시리즈에서 주간 합계
요구사항
3주치 일별 지출(8월 1–21일, 센트 단위로 저장)이 주당 한 줄로 말려
올라갑니다: week n: $total, 합계는 소수점 두 자리 달러로
환산합니다. 21개의 금액은 아래 코드에 있으며, 두 버전 모두
예상 출력 아래에 표시된 세 줄을 출력해야 합니다.
예상 출력
week 1: $83.50 week 2: $89.95 week 3: $91.75
나란히 보기
RxDart
FxDart
차이가 나는 이유
윈도잉 자체는 차이가 없습니다: bufferCount(7)과
chunk(7)은 같은 고정 윈도우에 대한 동일한 관용구이고,
21이 나누어떨어지지 않았다면 둘 다 짧은 꼬리 윈도우를 내보냈을
것입니다. 작업은 윈도우에 번호 매기기에서 갈라집니다.
RxDart에는 인덱스 연산자가 없으므로, 관용적인 수는
scan을 카운터로 차출하는 것입니다 — 유일한 역할이 버퍼
옆에 week + 1을 실어 나르는 것뿐인 누산기 레코드.
동작은 하지만, 그 fold는 상태 연산자의 옷을 입은 구경꾼입니다.
pull 쪽에는 그 목적을 위해 만들어진 단어가 있습니다:
zipWithIndex가 각 청크를 그 위치와 지연 방식으로 짝짓고
— 누산기는 어디에도 없습니다 — 같은 호흡에 sumBy가 각
주의 센트를 달러로 접어 냅니다. 이것이 반복되는 티어 2 패턴입니다 —
유한 데이터의 윈도잉은 두 모델 모두 잘하지만, 부기(인덱스, 키, 부분
집계)가 윈도우와 만나는 바로 그 지점에서 pull 어휘가 더 넓습니다.
용도 변경된 연산자 하나 대 의도된 연산자 하나: 판정은 FxDart에게
갑니다.
벤치마크
N = 98
시간 무승부
최대 메모리 무승부
N = 999,999
시간 FxDart 승
최대 메모리 RxDart 승
막대는 사이드별로 새 프로세스에서 반복 측정한 중앙값입니다(작은 N은 타이머 해상도를 위해 배치 처리). 두 사이드가 서로 5% 이내이거나 — 사람이 지각할 수 없는 차이인 0.6ms 이내이면 — 무승부로 칩니다. 상대 차이가 근소한 경우는 최대 5회까지 다시 측정합니다. 앱에서는 어느 막대가 짧든 몇 밀리초 이하의 차이는 사용자에게 보이지 않습니다. 메모리는 프로세스 최대 RSS입니다. Dart VM과 데이터셋은 양쪽이 동일하므로, 두 막대의 차이가 곧 파이프라인 자체가 붙들고 있는 양입니다.