如何解决将 KeyValuePair ForEach 转换为 LINQ
我有 keyvaluePair
格式的以下 Dictionary<string,string>
。
因为它总是被解析为 1 对,所以不需要 foreach
。但是,我无法在不导致语法错误的情况下将其删除。
请问是否可以去掉foreach
,并将其转换为LINQ
语法?
string key = "";
string value = "";
foreach (keyvaluePair<string,string> kvp in pairing)
{
Console.WriteLine("Key = {0},Value = {1}",kvp.Key,kvp.Value);
}
谢谢。
解决方法
我有一个字典列表(List<Dictionary<string,string>>
),每个字典只包含一对。
如果你想要更简洁的东西,你需要编写自己的扩展方法。下面的方法还将 legacy KeyValuePair<K,V>
结构转换为 ValueTuple<K,V>
结构,由于解构,它更有用:
public static class MyExtensions
{
public static ( TKey key,TValue value ) UnwrapSingle<TKey,TValue>( this IReadOnlyDictionary<TKey,TValue> dict )
{
var kvp = dict.Single();
return ( kvp.Key,kep.Value );
}
}
然后你可以这样做:
( String key,String value ) = paring.UnwrapSingle();
Console.WriteLine( key );
Console.WriteLine( value );
我刚刚看到您说它实际上是一个 List< Dictionary<K,V> >
,在这种情况下,您仍然可以使用 UnwrapSingle
,如下所示:
List< Dictionary<String,String> > listOfSingleElementDictionaries = ...
foreach( Dictionary<String,String> dict in listOfSingleElementDictionaries )
{
( String key,String value ) = paring.UnwrapSingle();
Console.WriteLine( key );
Console.WriteLine( value );
}
如果您想将它们全部展平为单个输出 Dictionary<String,String>
,那么您可以在 3 行中完成:
Dictionary<String,String> output = listOfSingleElementDictionaries
.Select( d => d.UnwrapSingle() )
.ToDictionary( t => t.key,t => t.value );
,
如果字典中只有一对像 Dictionary<string,string> paring = new Dictionary<string,string>();
那么你可以实现下面的代码,
var result = paring.ToDictionary(s => s.Key,s => s.Value);
var key = result.Single().Key;
var value = result.Single().Value;
如果你有一对像 List<Dictionary<string,string>> listOfDictionary = new List<Dictionary<string,string>>();
这样的字典列表,那么你可以这样做,
var result = listOfDictionary.ToDictionary(s => s.Keys.Single(),s => s.Values.Single());
当您的字典列表中有大量数据时,您可以通过这种方式优化性能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。