如何使用具有相同键的两个不同字典的值来构建新字典

sha*_*ath 1 c# dictionary indexoutofrangeexception

假设我们有两个带有以下密钥对值的字典:

  • 字典1:[{1,abc} {2,cde} {3,efg}]
  • 字典2:[{1,123} {2,234} {3,345}]
  • 我想创建一个字典如下:字典3:[{abc,123} {cde,234} {efg,345}]

        fieldValues = new List<List<string>>();
        docFieldKey = new List<List<string>>();
        docFieldValueDict = new Dictionary<string, List<string>>();
        docKeyDict = new Dictionary<string, List<string>>();
        iterateDocKeyDict = new List<string>();
        iterateDocFldValueDict = new List<string>();
    
        //To read row wise and store key and all values
        for (limit = 0; limit < docNames.Count; limit++)
        {
            for (row = 0; row < excelData.Count; row++)
            {
                if (excelData[row] == docNames[limit])
                {
                    for (colLimit = row + 1; colLimit < fieldNames.Count; colLimit++)
                    {
                        flag = true;
                        fieldValues.Add(new List<string>());
                        fieldValues[limit].Add(excelData[colLimit]);
                    }
                    if (flag == true)
                    {
                        docFieldValueDict.Add(docNames[limit], fieldValues[limit]);                          
                    }
                }
            }
    
        }
    
        //To add concatenated key for each docName
        for (limit = 0; limit < docNames.Count; limit++)
        {
            for (colLimit = 0; colLimit < concatKey.Count; colLimit++)
            {
                if (concatKey[colLimit].Contains(docNames[limit]))
                {
                    for (col = colLimit; col < fieldNames.Count - 1; col++)
                    {
                        flag = true;
                        docFieldKey.Add(new List<string>());
                        docFieldKey[limit].Add(concatKey[col]);
                    }
                    if (flag == true)
                    {
                        docKeyDict.Add(docNames[limit], docFieldKey[limit]);
                    }
                }
            }
    
        }
    
        //to merge the key and the value from both dictionaries
        for (limit = 0; limit <docKeyDict.Count; limit++)
        {
            var docKeyDictCompare = docKeyDict.ElementAt(limit);
            var docFldValueDictCompare = docFieldValueDict.ElementAt(limit);
            iterateDocKeyDict = docKeyDictCompare.Value;
            iterateDocFldValueDict = docFldValueDictCompare.Value;
            if (docKeyDictCompare.Key == docFldValueDictCompare.Key)
            {
                for (col = 0; col < fieldNames.Count - 1; col++)
                {
                    if ((iterateDocKeyDict.ElementAt(col)!=string.Empty) && (iterateDocFldValueDict.ElementAt(col)!=string.Empty))
                    {
                        flag = true;
                    }
                }
    
                if (flag == true)
                {
                    keyValuePairDict.Add(iterateDocKeyDict.ElementAt(col), iterateDocFldValueDict.ElementAt(col));
                }
            }
        }
    
    Run Code Online (Sandbox Code Playgroud)

我尝试了上面的但是我得到的索引超出了范围异常

if ((iterateDocKeyDict.ElementAt(col)!=string.Empty) &&(iterateDocFldValueDict.ElementAt(col)!=string.Empty)) 控制台中显示错误消息

Maa*_*ten 8

只是看看你的样本词典我会建议:

var dic1 = /* [ {1,abc} {2,cde} {3,efg} ] */;
var dic2 = /* [ {1,123} {2,234} {3,345} ] */;
var dic3 = dic1.ToDictionary(x => x.Value, x => dic2[x.Key]);
Run Code Online (Sandbox Code Playgroud)

但是看看你相当长的代码示例,我不确定它是否足够.