อะไรคือความแตกต่างระหว่าง LINQ ToDictionary และ ToLookup? ดูเหมือนพวกเขาจะทำในสิ่งเดียวกัน
อะไรคือความแตกต่างระหว่าง LINQ ToDictionary และ ToLookup? ดูเหมือนพวกเขาจะทำในสิ่งเดียวกัน
คำตอบ:
พจนานุกรมคือแผนที่ 1: 1 (แต่ละคีย์ถูกแมปกับค่าเดียว) และพจนานุกรมไม่แน่นอน (แก้ไขได้) หลังจากข้อเท็จจริง
การค้นหาคือ 1: แผนที่จำนวนมาก (หลายแผนที่แต่ละคีย์จะถูกแมปกับIEnumerable<>
ค่าด้วยคีย์นั้น) และไม่มีการกลายพันธุ์บนILookup<,>
อินเทอร์เฟซ
ในฐานะบันทึกด้านข้างคุณสามารถค้นหาการค้นหา (ผ่านตัวสร้างดัชนี) บนคีย์ที่ไม่มีอยู่และคุณจะได้รับลำดับที่ว่างเปล่า ทำเช่นเดียวกันกับพจนานุกรมและคุณจะได้รับข้อยกเว้น
ดังนั้น: มีบันทึกกี่รายการที่ใช้แต่ละคีย์?
วิธีที่ง่ายเกินไปในการดูคือ a Lookup<TKey,TValue>
นั้นเทียบได้กับDictionary<TKey,IEnumerable<TValue>>
ILookup<,>
หรือเป็นการใช้งานฟรีที่จะส่งไฟล์KeyNotFoundException
. การใช้งานใน Rxพ่นไฟล์KeyNotFoundException
.
Dictionary<TKey, IEnumerable<TValue>>
สามารถอธิบายเป็นพจนานุกรมของรายการ ดังนั้นToLookup()
เป็นเหมือนว่า: ให้ฉันพจนานุกรมของรายการ ด้วยเหตุผลบางอย่างที่ได้ยินมันอธิบายแบบนั้นช่วยให้ฉันเข้าใจในหัว
ToDictionary คือ <TKey, TValue> ในขณะที่ ToLookup <TKey, T1, T2, T3, ... > คล้ายกับ IGrouping แต่การแจงนับยังคงอยู่ในหน่วยความจำ
T1, T2, T3, ...
; ToLookup และ ToDictionary (วิธีการต่างๆ) มี API ที่เหมือนกันมาก