繁体   English   中英

从Dictionary中加入键和值

[英]Join keys and values from Dictionary

有没有办法快速(即不使用foreach )连接以下Dictionary

Dictionary<string, string> g = new Dictionary<string, string>();
g.Add("K", "k1");
g.Add("L", "l1");

"K=@K,L=@L"

得到这个结果怎么样: "K=k1,L=l1"

我正在使用String.Join玩一点,但这似乎没有做我想要的。

一些背景:我有一个键/值对的列表,我想在我的数据库中插入(...keys...) VALUES (...values...)或更新记录...,key=value, ...

你可以用LINQ相当容易地做到这一点,它仍然在使用foreach ,所以它不会“更快”但它应该易于阅读。

Dictionary<string, string> g = new Dictionary<string, string>();
g.Add("K", "k1");
g.Add("L", "l1");

var keys1 = g.Select(x=>String.Format("{0}=@{0}", x.Key));
var result1 = String.Join(",", keys1);
Console.WriteLine(result1);

var keys2 = g.Select(x=>String.Format("{0}={1}", x.Key, x.Value));
var result2 = String.Join(",", keys2);
Console.WriteLine(result2);

运行代码

我们做的第一件事就是创建我们想要的项目的IEnumerable<String> ,然后我们使用string.Join将IEnumerable组合成一个字符串。

编辑:
如果要更新到数据库,我建议删除此方法并尝试一些ORM库,如Entity Framework或NHibernate。 他们为您完成所有这些工作,使用对象更容易,而不用担心生成动态查询。

我能想到的最短的代码是

string res = string.Join("\n", g.Select(p => "K=" + p.Key + ",L=" + p.Value));

这导致了

K=K,L=k1
K=L,L=l1

您也可以在字典上使用扩展类。 这样运行相同但后来让你做一些简单的事情

g.ToKeyValueString("{0}=@{1}", ",");

助手班

internal static class DictionaryHelper
{
    /// <summary>
    /// Returns a string of key value pairs in the format k1=v1,k2=v2,...
    /// </summary>
    /// <typeparam name="TKey"></typeparam>
    /// <typeparam name="TValue"></typeparam>
    /// <param name="dictionary"></param>
    /// <returns></returns>
    public static string ToKeyValueString<TKey, TValue>(this Dictionary<TKey, TValue> dictionary)
    {
        return ToKeyValueString(dictionary, "{0}={1}", ",");
    }

    /// <summary>
    /// Returns a string of key value paris in the format k1=v1{separator}kk2=v2...
    /// </summary>
    /// <typeparam name="TKey"></typeparam>
    /// <typeparam name="TValue"></typeparam>
    /// <param name="dictionary"></param>
    /// <param name="seperator">The string separator for the pairs</param>
    /// <returns></returns>
    public static string ToKeyValueString<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, string seperator)
    {
        return ToKeyValueString(dictionary, "{0}={1}", seperator);
    }

    /// <summary>
    /// Returns a string of key value pairs in the specified format with the specified separator
    /// </summary>
    /// <typeparam name="TKey"></typeparam>
    /// <typeparam name="TValue"></typeparam>
    /// <param name="dictionary"></param>
    /// <param name="format">The format string for the key value pairs</param>
    /// <param name="separator">The string separator for the pairs</param>
    /// <returns></returns>
    public static string ToKeyValueString<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, string format, string separator)
    {
        var pairs = dictionary.Select(c => string.Format(format, c.Key, c.Value));
        return string.Join(separator, pairs);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM