[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