<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          NET問(wèn)答: 如何高效的合并兩個(gè) Dictionary ?

          共 2594字,需瀏覽 6分鐘

           ·

          2021-06-09 12:17


          咨詢區(qū)

          • orip

          我現(xiàn)在有一個(gè)需求,需要對(duì)多個(gè) Dictionary<T1,T2> 進(jìn)行合并,我能想到的方法簽名大概是這樣的。


          public static Dictionary<TKey,TValue> Merge<TKey,TValue>(Dictionary<TKey,TValue>[] dictionaries);

          或者


          public static Dictionary<TKey,TValue> Merge<TKey,TValue>(IEnumerable<Dictionary<TKey,TValue>> dictionaries);

          請(qǐng)問(wèn)有什么簡(jiǎn)單粗暴的方法進(jìn)行合并,當(dāng)然這里還要處理 key 沖突的坑。

          回答區(qū)

          • Jon Skeet

          多個(gè)字典合并的過(guò)程中如果發(fā)生key沖突,這時(shí)候就看你的場(chǎng)景了,如果是一定要拋異常的話,可以這樣寫。


          var result = dictionaries.SelectMany(dict => dict).ToDictionary(pair => pair.Key, pair => pair.Value);

          如何是 重寫 或者 忽略,那么可以這樣寫。


          var result = dictionaries.SelectMany(dict => dict)
                                   .ToLookup(pair => pair.Key, pair => pair.Value)
                                   .ToDictionary(group => group.Key, group => group.First());

          雖然上面代碼的寫法不那么好看,而且效率不是很高,但我覺(jué)得這是最簡(jiǎn)單粗暴的寫法了。??

          • orip

          其實(shí)很簡(jiǎn)單,如果你想合并多個(gè) Dictionary,我實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的 Merge 擴(kuò)展方法,代碼如下:


          using System.Collections.Generic;
          ...
          public static Dictionary<TKey, TValue> Merge<TKey,TValue>(IEnumerable<Dictionary<TKey, TValue>> dictionaries)
          {
              var result = new Dictionary<TKey, TValue>();
              foreach (var dict in dictionaries)
                  foreach (var x in dict)
                      result[x.Key] = x.Value;
              return result;
          }

          如果key沖突我這里采用的是 覆蓋,如果不處理沖突,那就把 result[x.Key] = x.Value 改成 result.Add(x.Key,x.Value) 即可。

          點(diǎn)評(píng)區(qū)

          這是一個(gè)很基礎(chǔ)的問(wèn)題,在實(shí)際開發(fā)中也會(huì)經(jīng)常遇到,對(duì)了,SelectMany + ToLookup + ToDictionary 三者配合簡(jiǎn)直一絕,我在實(shí)際開發(fā)中也經(jīng)常用到,學(xué)習(xí)了。


          往期精彩回顧




          【推薦】.NET Core開發(fā)實(shí)戰(zhàn)視頻課程 ★★★

          .NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第一章 入門篇-開篇及總體規(guī)劃

          【.NET Core微服務(wù)實(shí)戰(zhàn)-統(tǒng)一身份認(rèn)證】開篇及目錄索引

          Redis基本使用及百億數(shù)據(jù)量中的使用技巧分享(附視頻地址及觀看指南)

          .NET Core中的一個(gè)接口多種實(shí)現(xiàn)的依賴注入與動(dòng)態(tài)選擇看這篇就夠了

          10個(gè)小技巧助您寫出高性能的ASP.NET Core代碼

          用abp vNext快速開發(fā)Quartz.NET定時(shí)任務(wù)管理界面

          在ASP.NET Core中創(chuàng)建基于Quartz.NET托管服務(wù)輕松實(shí)現(xiàn)作業(yè)調(diào)度

          現(xiàn)身說(shuō)法:實(shí)際業(yè)務(wù)出發(fā)分析百億數(shù)據(jù)量下的多表查詢優(yōu)化

          關(guān)于C#異步編程你應(yīng)該了解的幾點(diǎn)建議

          C#異步編程看這篇就夠了


          瀏覽 58
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产午夜精品久久 | 超碰人人超碰 | 操美女的骚逼 | 国产二区中文字幕 | 欧美三级片网站在线 |