如何从Dictionary中检索键/值,并将它们组合成一个字符串

时间:2015-10-20 22:32:59

标签: c# dictionary

我尝试从字典中检索特定对,并将此对转换为字符串,如下所示:

        Dictionary<string, string> testDictionary= new Dictionary<string, string>();
        testDictionary.Add("3123", "1");
        testDictionary.Add("3523", "2");
        testDictionary.Add("5532", "1");

        string memberId="5532";
        string finalSelectedValue = testDictionary.Where(x => x.Key == memberId).Select(y => y.Key + "_" + y.Value).ToString();

        Console.WriteLine(finalSelectedValue);

但是,我不知道如何实现在字典中组合此特定对的键和值的最后一步。

预期结果为:“5532_1”

5 个答案:

答案 0 :(得分:1)

你不需要LINQ,因为字典不能有重复的密钥。您真正需要的是 - 只需按键输入并格式化其值(字典对此任务非常有效):

string memberId = "5532";
string value;

if (testDictionary.TryGetValue(memberId, out value))
{
    string finalSelectedValue = String.Format("{0}_{1}", memberId, value);
}
else
{
    // member not found
}

表现不佳,但是单行:

string finalSelectedValue = testDictionary.ContainsKey(memberId) ?
     $"{memberId}_{testDictionary[memberId]}" : null; // C# 6 string formatting

为什么你的方法不起作用?您正在计算所有字典条目,以查找字典中是否存在某些键(并且这是一个很大的过度杀伤力)。 Where运算符将使用单个条目返回空集合或集合(因为字典不能具有重复的键)。之后,您将过滤结果投影到字符串集合(同样是一个或零个项目)。然后你将集合转换为字符串 - 但这将只返回集合IEnumerable<string>的类型名称。要修复代码,您需要将ToString()替换为FirstOrDefault(),如果找不到条目,​​您将获得单个格式化字符串或null。但是..见上文:))

答案 1 :(得分:0)

如何跳过Linq并执行此操作:

string finalSelectedValue = memberId + "_" + testDictionary[memberId];

testDictionary[memberId]将返回字典项memberId

的值

答案 2 :(得分:0)

试试这个。

var finalSelectedValue = testDictionary.Where(x => x.Key == memberId).Select(y => y.Key + "_" + y.Value).FirstOrDefault();

答案 3 :(得分:0)

var finalSelectedValue = string.Format("{0}_{1}", memberId, testDictionary[memberId]);

答案 4 :(得分:0)

Select将返回IEnumerable<KeyValuePair>。在这个IEnumerable上调用ToString不会给出你想要的结果。虽然手动查找密钥并获取值可能很简单,但如果您在此处查找linq解决方案,则需要通过使用以某种方式枚举返回的可枚举的调用来获取结果,例如{ {1}},FirstFirstOrDefaultSingle

你也可以做一个简单的SingleOrDefault来做这件事。您还应该定义当密钥不存在时会发生什么。我把它留作“?”在这里,因为它没有在你的帖子中解决。

Func

然后随意使用

Func<Dictionary<string,string>,string,string> specificPair = 
    (d,key) => d.ContainsKey(key) ? key + "_" + d[key] : "?";