C#将值从一个字典替换到另一个字典

C#将值从一个字典替换到另一个字典,c#,object,dictionary,C#,Object,Dictionary,我有两个具有相同键但值不同的字典。我需要在dictionary1中找到所有等于1的值,并用dictionary2中的值替换它们。我可以编辑第一个字典,或者更好的办法是将新值保存到另一个字典中,无论哪种方式都可以。我的想法是使用foreach循环,然后在dictionary1==1中查找任何值,然后进入dictionary2,提取该键的值,并将其保存到dictionary1或该键的另一个字典中 using System; using System.Collections.Generic; usin

我有两个具有相同键但值不同的字典。我需要在dictionary1中找到所有等于1的值,并用dictionary2中的值替换它们。我可以编辑第一个字典,或者更好的办法是将新值保存到另一个字典中,无论哪种方式都可以。我的想法是使用foreach循环,然后在dictionary1==1中查找任何值,然后进入dictionary2,提取该键的值,并将其保存到dictionary1或该键的另一个字典中

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Practice_With_Dictionaries
{
    class Program
    {
        static void Main(string[] args)
        {


                object[] keys= new object[5];
                keys[0] = "1111";
                keys[1] = "2222";
                kesy[2] = "3333";
                kesy[3] = "4444";
                kesy[4] = "5555";


                object[] speed = new object[5];
                speed[0] = 1;
                speed[1] = 2;
                speed[2] = 1;
                speed[3] = 1;
                speed[4] = 5;

                object[] speed2 = new object[5];
                speed2[0] = 1;
                speed2[1] = 2;
                speed2[2] = 3;
                speed2[3] = 4;
                speed2[4] = 5;





   Dictionary<object, object> dictionary1 = new Dictionary<object,object>();
   Dictionary<object, object> dictionar2 = new Dictionary<object, object>();

                for (int iRow = 0; iRow < interfaceKeys.Length; iRow++)
                {

                  dictionary1.Add(keys[iRow], (double)speed[iRow]);
                  dictionary2.Add(keys[iRow], (double)speed2[iRow]);


                }


                // for each loop with if statements




        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用字典进行名称空间实践
{
班级计划
{
静态void Main(字符串[]参数)
{
对象[]键=新对象[5];
键[0]=“1111”;
键[1]=“2222”;
凯西[2]=“3333”;
凯西[3]=“4444”;
凯西[4]=“5555”;
对象[]速度=新对象[5];
速度[0]=1;
速度[1]=2;
速度[2]=1;
速度[3]=1;
速度[4]=5;
对象[]速度2=新对象[5];
速度2[0]=1;
速度2[1]=2;
速度2[2]=3;
速度2[3]=4;
速度2[4]=5;
字典字典1=新字典();
字典字典2=新字典();
for(int-iRow=0;iRow
首先,如果将
字符串
作为键,将
int
作为值,则应使用
字典
而不是
字典

否则

var keys = dictionary1.Where(kvp => kvp.Value == 1).Select(kvp => kvp.Key);
foreach (var key in keys)
{
    int value;
    if (dictionary2.TryGetValue(key, out value))
        dictionary1[key] = value;
}
您可以使用LINQ和方法(我做了一些更改以简化代码,希望这是可以接受的):

static void Main(字符串[]args)
{
var keys=新字符串[5]{“1111”、“2222”、“3333”、“4444”、“5555”};
var速度=新的双[5]{1,2,1,1,5};
var speed2=新的双[5]{1,2,3,4,5};
var Dictionary 1=新字典();
var dictionary2=新字典();
for(int-iRow=0;iRowx.Key,kv=>kv.Value==1?字典2[kv.Key]:kv.Value);
}

您可以这样做

var dictionary1 = new Dictionary<string, string>
{
    {"a", "1"},
    {"b", "2"},
    {"c", "3"},
    {"d", "3"}
};



var dictionary2 = new Dictionary<string, string>
{
    {"a", "1"},
    {"b", "22"},
    {"c", "33"}
};

var result = dictionary1
    .Where(d => dictionary2.ContainsKey(d.Key) && dictionary2[d.Key] == d.Value);
var字典1=新字典
{
{“a”,“1”},
{“b”,“2”},
{“c”,“3”},
{“d”,“3”}
};
var dictionary2=新字典
{
{“a”,“1”},
{“b”,“22”},
{“c”,“33”}
};
var结果=1
其中(d=>dictionary2.ContainsKey(d.Key)&&dictionary2[d.Key]==d.Value);

结果将包含所有在Dictionary1和Dictionary2中具有相同键且在Dictionary1中具有值的值。

但您没有两个字典。是否要生成词典?您的代码示例与您的问题不匹配。您能否在代码示例中创建字典,以便我们可以看到您从哪些数据开始?您还可以对集合()使用初始值设定项语法。我声明了两个字典Dictionary Dictionary 1=new Dictionary();字典字典2=新字典();在上面的代码中。它们具有相同的键,但值不同。从我看到的答案来看,使用linq是实现我想要的最好的方法。
var keys = dictionary1.Where(kvp => kvp.Value == 1).Select(kvp => kvp.Key);
foreach (var key in keys)
{
    int value;
    if (dictionary2.TryGetValue(key, out value))
        dictionary1[key] = value;
}
static void Main(string[] args)
{
    var keys = new string[5] { "1111", "2222", "3333", "4444", "5555" };

    var speed = new double[5] { 1, 2, 1, 1, 5 };

    var speed2 = new double[5] { 1, 2, 3, 4, 5 };

    var dictionary1 = new Dictionary<string, double>();
    var dictionary2 = new Dictionary<string, double>();

    for (int iRow = 0; iRow < keys.Length; iRow++)
    {
        dictionary1.Add(keys[iRow], speed[iRow]);
        dictionary2.Add(keys[iRow], speed2[iRow]);
    }

    // the solution
    var result = dictionary1.ToDictionary(x => x.Key, kv => kv.Value == 1 ? dictionary2[kv.Key] : kv.Value);
}
var dictionary1 = new Dictionary<string, string>
{
    {"a", "1"},
    {"b", "2"},
    {"c", "3"},
    {"d", "3"}
};



var dictionary2 = new Dictionary<string, string>
{
    {"a", "1"},
    {"b", "22"},
    {"c", "33"}
};

var result = dictionary1
    .Where(d => dictionary2.ContainsKey(d.Key) && dictionary2[d.Key] == d.Value);