อะไรคือความแตกต่างระหว่าง 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 ที่เหมือนกันมาก