微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将一个词典转换为另一本词典的最佳方法是什么

如何解决将一个词典转换为另一本词典的最佳方法是什么

| 我有一本字典,条目看起来像这样:
dictionary[\"ABC.123\"] = \"Test\"
dictionary[\"DEF.123\"] = \"Test2\"
dictionary[\"EFG.123\"] = \"Test3\"
dictionary[\"EFG.343\"] = \"Test3\"
dictionary[\"ABC.456\"] = \"Test\"
并且我想创建一个新的字典,如下所示:(基本上是解析出\“。\”之前的开始字符串,并将其创建为键并使用相同的值。
dictionary[\"ABC\"] = \"Test\"
dictionary[\"DEF\"] = \"Test2\"
dictionary[\"EFG\"] = \"Test3\"
如您所见:第一个字典中键的第一部分与值之间始终存在1到1的映射,因此不会发生冲突 使用LINQ从第一个字典创建第二个字典的最简单方法是什么? 我可以手动遍历每条记录并解析出新的密钥并创建每条新记录,但是我发现有一种使用LINQ的方式     

解决方法

        
var newDict = dictionary.GroupBy(kvp => kvp.Key.Remove(kvp.Key.IndexOf(\'.\')))
                        .ToDictionary(grp => grp.Key,grp => grp.First().Value);
尽管普通的“ 3”可能会更具可读性和效率:
var newDict = new Dictionary<string,string>();
foreach (var kvp in dictionary)
{
    newDict[kvp.Key.Remove(kvp.Key.IndexOf(\'.\'))] = kvp.Value;
}
    ,        
var dict2 = dictionary.GroupBy(x => x.Key.Split(\'.\')[0])
                      .ToDictionary(g => g.Key,g => g.First().Value);
    ,        一种简单的方法是使用Select方法与ToDictionary一起生成所需的KeyValuePair
var response = dictionary
              .Select(kvp => new KeyValuePair<string,string>(kvp.Key.Remove(kvp.Key.IndexOf(\'.\')),kvp.Value))
              .ToDictionary(kvp => kvp.Key,kvp => kvp.Value);
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。