通过拆分 Key 来分组 Dictionary 并创建新的 Dictionary
Group Dictionary by splitting the Key and create new Dictionary
我有这样的字典:
Dictionary<string, object> properties = new Dictionary<string, object>()
{
{"aa:bb", MyObject1},
{"aa:cc", MyObject2},
{"dd:xx", MyObject3},
{"dd:yy", MyObject4}
};
字典的关键字是以':'
为分隔符的字符串。现在我想从那个词典中创建一个新词典:
Dictionary<string, object> ddProperties = new Dictionary<string, object>()
{
{"xx", MyObject3},
{"yy", MyObject4}
};
我正在寻找一种通过拆分原始词典的键来创建新词典的优雅方法。这可能与 LINQ 吗?
尝试:
var ddProperties = properties.ToDictionary
(kvp => kvp.Key.Split(':')[1], kvp => kvp.Value);
如果您只需要以 dd
开头的那些(如您的示例输出所示),我会这样做:
var filteredPairs = from kvp in properties
let split = kvp.Key.Split(':')
where split[0] == "dd"
select new { Key = split[1], kvp.Value };
var ddProperties = filteredPairs.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
请注意,这里没有防止重复的保护。如果您希望在转换后出现重复键,您希望如何处理它们?
请注意,由于每个条目都是多个结果,因此请使用 .SelectMany()
。
如前所述,ToDictionary
可以很好地构建字典
properties
.SelectMany(kvp => kvp.Key.Split(':')
// Select each item in the split
// to gain access to the original Key Value Pair parameter
.Select(key => new { Key = key, Value = kvp.Value }))
.ToDictionary(
a => a.Key,
a => a.Value);
我有这样的字典:
Dictionary<string, object> properties = new Dictionary<string, object>()
{
{"aa:bb", MyObject1},
{"aa:cc", MyObject2},
{"dd:xx", MyObject3},
{"dd:yy", MyObject4}
};
字典的关键字是以':'
为分隔符的字符串。现在我想从那个词典中创建一个新词典:
Dictionary<string, object> ddProperties = new Dictionary<string, object>()
{
{"xx", MyObject3},
{"yy", MyObject4}
};
我正在寻找一种通过拆分原始词典的键来创建新词典的优雅方法。这可能与 LINQ 吗?
尝试:
var ddProperties = properties.ToDictionary
(kvp => kvp.Key.Split(':')[1], kvp => kvp.Value);
如果您只需要以 dd
开头的那些(如您的示例输出所示),我会这样做:
var filteredPairs = from kvp in properties
let split = kvp.Key.Split(':')
where split[0] == "dd"
select new { Key = split[1], kvp.Value };
var ddProperties = filteredPairs.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
请注意,这里没有防止重复的保护。如果您希望在转换后出现重复键,您希望如何处理它们?
请注意,由于每个条目都是多个结果,因此请使用 .SelectMany()
。
如前所述,ToDictionary
可以很好地构建字典
properties
.SelectMany(kvp => kvp.Key.Split(':')
// Select each item in the split
// to gain access to the original Key Value Pair parameter
.Select(key => new { Key = key, Value = kvp.Value }))
.ToDictionary(
a => a.Key,
a => a.Value);