[Rust] itertools
itertools๋ ๊ธฐ๋ณธ Iter ํ์
์ ๋ณด์กฐํ๋ ํํ์ ํ์ฅํ ๊ธฐ๋ฅ์ด๋ค.
std iterator๋ map, filter, ๋จ์ํ ์ง๊ณ ๊ฐ์ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง, ๋ณต์กํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ค๋ฉด ์์ด ๊ฐ๋ ๋ถ๋ถ์ด ๋ถ๋ช
์กด์ฌํ๋ค.
itertools๋ ๊ทธ๋ฐ ๋ถ๋ถ๋ค์ ๋ํด์ ์์ฃผ ์ฐ๋ ํจํด๋ค์ ์ถ๊ฐ ๊ตฌํํด๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.
์ค์น ๋ฐ ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
์ค์น๋ ๊ฐ๋จํ๋ค.
cargo add itertools

์ฌ์ฉ๋ฒ๋ ๊ฐ๋จํ ํธ์ด๋ค.
Itertools๋ผ๋ ํธ๋ ์์ useํ๊ธฐ๋ง ํด๋ ํ์ฌ ์ปจํ
์คํธ์์ ๊ด๋ จ ๋ฉ์๋๋ค์ด Iter ๊ฐ์ฒด๋ค์ ์๋ ๋ฐ์ธ๋ฉ๋๋ค.
๋ฐ๋ก ๋ญ ํด์ผํ ํ์๋ ์๋ค.
์ก๋คํ ๊ธฐ๋ฅ์ด ๋งค์ฐ ๋ง์ ํธ์ธ๋ฐ, ์์ฃผ ์ฌ์ฉํ ๋งํ ๊ธฐ๋ฅ๋ค ๋ช๊ฐ์ง๋ง ์๊ฐํด๋ณด๊ฒ ๋ค.
์กฐํฉ
combination์ ํ์ฌ ์ปฌ๋ ์
์์ N๊ฐ๋ก ์ด๋ฃจ์ด์ง๋ ์กฐํฉ์ ์์ฑํด์ค๋ค.
์ํ์ด๋ ๋ฌธ์ ํ์ดํ ๋ ๋์ค๋ ๊ทธ ์กฐํฉ์ด ๋ง๋ค.

group by ๊ธฐ๋ฅ
์กฐ๊ธ ์์ฃผ ์ฌ์ฉํ ๋งํ ๊ธฐ๋ฅ์ด๋ค. ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํค ๋จ์๋ก ์ ๋ ฌ๋์ด์๋ค๋ ๊ฐ์ ํ์์, ๊ทธ๋ฃจํ์ ์๋ํ๋ค.
์ด๋ฐ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด
๋ค์๊ณผ ๊ฐ์ด ํ๋ฉด ๊ตฌ๋งค์ ๋จ์๋ก ๊ทธ๋ฃจํ์ด ๊ฐ๋ฅํ๋ค.
group_by ํด๋ก์ ์์ ๋ฐํํ ๊ฐ์ด ๊ทธ๋ฃน์ ๋ฌถ๋ ๊ธฐ์ค์ด ๋๋ค.
๊ทธ๋ฆฌ๊ณ group iter ํํ 1 ํ๋์์ ๋ฐํ๋๋ ๊ฐ์ด ๊ทธ๋ฃจํ๋ ๋ฆฌ์คํธ๋ค.
๊ธฐ๋ํ๋๋ก ์ ์คํ์ด ๋์๋ค.
์ข ์ ์ํ ์ ์, ํค๋ ๊ฐ์ ํค๋ผ๋ฆฌ ๋ชจ์ฌ์์ด์ผ ์๋๋๋ก ๋์ํ๋ค๋ ๊ฒ์ด๋ค.
์๋์ฒ๋ผ ํค๊ฐ ํผ์ ธ์์ผ๋ฉด

๋ค๋ฅธ๊ฑธ๋ก ๋ฌถ์ด๋ฒ๋ฆฐ๋ค.
์ฒญํฌ
์ด๊ฒ๋ ๊ฝค ์์ฃผ ์ฌ์ฉํ ๋งํ ๊ธฐ๋ฅ์ด๋ค. ์ปฌ๋ ์ ์ ์ฌ๋ฌ๊ฐ์ ์ฒญํฌ ๋จ์๋ก ์ชผ๊ฐ ๋ค.
์ด๊ฑด 3๊ฐ ๊ธธ์ด์ ์ฒญํฌ๋ก ์ชผ๊ฐ๋ ์์ ๋ค.
์คํํด๋ณด๋ฉด
๊ธฐ๋ํ๋๋ก ์๋ ธ์์ ํ์ธํ ์ ์๋ค.
Vec collect
.collect::<Vec<_>>์ ์ค์๋ง์ฉ ํจ์๋ค.
์๋ ์ ๊ฑฐ ์น๋๊ฒ ์ข ๊ท์ฐฎ์ ํธ์ธ๋ฐ, ๊ทธ๊ฑฐ์ ๋นํด์ ๋น๊ต์ ๊น๋ํ๊ณ ํ์ดํํ๊ธฐ๋ ํธํ๋ค.
์ฐธ์กฐ
https://docs.rs/itertools/latest/itertools/trait.Itertools.html