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

将 KeyValuePair ForEach 转换为 LINQ

如何解决将 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 举报,一经查实,本站将立刻删除。