อะไรคือความแตกต่างระหว่าง LINQ ToDictionary และ ToLookup


คำตอบ:


176

พจนานุกรมคือแผนที่ 1: 1 (แต่ละคีย์ถูกแมปกับค่าเดียว) และพจนานุกรมไม่แน่นอน (แก้ไขได้) หลังจากข้อเท็จจริง

การค้นหาคือ 1: แผนที่จำนวนมาก (หลายแผนที่แต่ละคีย์จะถูกแมปกับIEnumerable<>ค่าด้วยคีย์นั้น) และไม่มีการกลายพันธุ์บนILookup<,>อินเทอร์เฟซ

ในฐานะบันทึกด้านข้างคุณสามารถค้นหาการค้นหา (ผ่านตัวสร้างดัชนี) บนคีย์ที่ไม่มีอยู่และคุณจะได้รับลำดับที่ว่างเปล่า ทำเช่นเดียวกันกับพจนานุกรมและคุณจะได้รับข้อยกเว้น

ดังนั้น: มีบันทึกกี่รายการที่ใช้แต่ละคีย์?

วิธีที่ง่ายเกินไปในการดูคือ a Lookup<TKey,TValue>นั้นเทียบได้กับDictionary<TKey,IEnumerable<TValue>>


5
ยังค่อนข้างคล้ายกับ groupby?
Carlo V. Dango

7
เป็นลักษณะการทำงานของการค้นหาที่ส่งคืนลำดับว่างสำหรับส่วนสำคัญที่ขาดหายไปของสัญญามาตรฐานของILookup<,>หรือเป็นการใช้งานฟรีที่จะส่งไฟล์KeyNotFoundException. การใช้งานใน Rxพ่นไฟล์KeyNotFoundException.
Lukazoid

เผื่อว่าจะช่วยใคร: Dictionary<TKey, IEnumerable<TValue>>สามารถอธิบายเป็นพจนานุกรมของรายการ ดังนั้นToLookup()เป็นเหมือนว่า: ให้ฉันพจนานุกรมของรายการ ด้วยเหตุผลบางอย่างที่ได้ยินมันอธิบายแบบนั้นช่วยให้ฉันเข้าใจในหัว
Nate Cook

-4

ToDictionary คือ <TKey, TValue> ในขณะที่ ToLookup <TKey, T1, T2, T3, ... > คล้ายกับ IGrouping แต่การแจงนับยังคงอยู่ในหน่วยความจำ


3
ไม่ค่อยแน่ใจว่าคุณกำลังพยายามอธิบายอะไรด้วยT1, T2, T3, ...; ToLookup และ ToDictionary (วิธีการต่างๆ) มี API ที่เหมือนกันมาก
Marc Gravell
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.