gpt4 book ai didi

linq - 拆分为 KeyValuePair 而不是 Array

转载 作者:行者123 更新时间:2023-12-01 11:42:51 24 4
gpt4 key购买 nike

我有一串数据:

Key1=Value1,Key2=Value2,KeyN=ValueN

我想把字符串拆分成

List<KeyValuePair<string, string>>

我可以很容易地做到这一点:

List<string[]> values = item.Split( ',' ).Select( p => p.Split( '=' ) ).ToList();

但我只是想不出将其放入 KeyValuePair 列表的方法。到目前为止我得到的最接近的是:

List<KeyValuePair<string, string>> values = item.Split( ',' )
.Select( p => new KeyValuePair<string, string>(){ p.Split( '=' ) } ).ToList();

但是还是有点不对:(

我知道我可以很容易地用一个循环来完成它,但我真的很想让它在 Linq 中工作,因为熟能生巧。我已经看到很多类似问题的例子,比如 this one ,但我似乎无法将这些问题和我的问题联系起来,所以如果我不小心发布了重复的问题,请原谅我。

真的很感激任何帮助,谢谢:)

最佳答案

到目前为止,您所做的一切都很好。然后,您有两种方法可以实现您想要的:

创建方法ToKeyValuePair

public static KeyValuePair<string, string> ToKeyValuePair(string[] array)
{
if (array.Length != 2)
throw new ArgumentException("The array must contain exactly 2 elements.");

return new KeyValuePair<string, string>(array[0], array[1]);
}

var values = (item.Split( ',' )
.Select( p => ToKeyValuePair(p.Split( '=' ))))
.ToList();

使用 LINQ 查询语法

如果我将上面的行转换为查询语法:

var values = (from p in item.Split( ',' )
select ToKeyValuePair(p.Split( '=' )))
.ToList();

变化不大。

但是,多亏了这种新语法,由于 let 子句,删除 ToKeyValuePair(...) 的用法非常容易:

var values = (from p in item.Split( ',' )
let splittedP = p.Split( '=' ) // Declares a variable
select new KeyValuePair<string, string>(splittedP[0], splittedP[1]))
.ToList();

当然,最后一行可以用扩展方法语法编写(即用.Select(p=>...)),但很难阅读:

var values = (item.Split(',')
.Select(p => new { p, splittedP = p.Split('=') })
.Select(p => new KeyValuePair<string, string>(p.splittedP[0], p.splittedP[1])))
.ToList();

关于linq - 拆分为 KeyValuePair 而不是 Array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17816759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com