gpt4 book ai didi

c# - 将字符串集合转换为字典

转载 作者:太空宇宙 更新时间:2023-11-03 20:26:00 26 4
gpt4 key购买 nike

这可能是一个简单的问题,但我却找不到答案。

我有一组字符串,正在尝试将其转换为字典。

集合中的每个字符串都是我从正则表达式匹配中获得的以逗号分隔的值列表。我希望字典中每个条目的键是逗号分隔列表中的第四个元素,相应的值是逗号分隔列表中的第二个元素。

当我尝试直接调用 ToDictionary 时,我最终陷入了某种似乎将我踢出我所在的 BackgroundWorker 线程的循环:

var MoveFromItems = matches.Cast<Match>()
.SelectMany(m => m.Groups["args"].Captures
.Cast<Capture>().Select(c => c.Value));

var dictionary1 = MoveFromItems.ToDictionary(s => s.Split(',')[3],
s => s.Split(',')[1]);

当我手动创建字典时,一切正常:

var MoveFroms = new Dictionary<string, string>();

foreach(string sItem in MoveFromItems)
{
string sKey = sItem.Split(',')[3];
string sVal = sItem.Split(',')[1];

if(!MoveFroms.ContainsKey(sKey))
MoveFroms[sKey.ToUpper()] = sVal;
}

我很感激你能提供的任何帮助。

最佳答案

问题很可能是键有重复。您有三个选择。

保留第一个条目 (这是您当前在 foreach 循环中所做的事情)

键只有一个条目,第一个出现的条目 - 这意味着您可以有一个字典:

var first = MoveFromItems.Select(x => x.Split(','))
.GroupBy(x => x[3])
.ToDictionary(x => x.Key, x => x.First()[1]);

保留所有条目,分组

键将有多个条目(每个键返回一个 Enumerable),并且您使用 Lookup 而不是 Dictionary:

var lookup = MoveFromItems.Select(x => x.Split(','))
.ToLookup(x => x[3], x => x[1]);

保留所有条目,展平

没有键这样的东西,只是一个扁平化的条目列表:

var flat = MoveFromItems.Select(x => x.Split(','))
.Select(x => new KeyValuePair<string,string>(x[3], x[1]));

您也可以在此处使用元组 (Tuple.Create(x[3], x[1]);)。


注意:在这些情况下,您需要决定在何处/是否希望键为大写或小写。我还没有做任何与此相关的事情。如果您想将 key 存储为上层,只需将上面所有内容中的 x[3] 更改为 x[3].ToUpper()

关于c# - 将字符串集合转换为字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10628789/

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