gpt4 book ai didi

c# - 识别和分组字符串集合中的相似项目

转载 作者:太空宇宙 更新时间:2023-11-03 17:17:01 30 4
gpt4 key购买 nike

我有一组如下所示的字符串:

List<string> codes = new List<string>
{
"44.01", "44.02", "44.03", "44.04", "44.05", "44.06", "44.07", "44.08", "46", "47.10"
};

每个字符串由两个由句点分隔的部分组成 - 前缀代码和子代码。有些字符串没有子代码。

我希望能够组合前缀相同的字符串,并将它们与其他代码一起输出如下:

44(01,02,03,04,05,06,07,08),46,47.10

我遇到了第一个障碍,即如何识别前缀值相同的代码并将其组合在一起,以便我可以将它们组合成一个字符串,如您在上面看到的那样。

最佳答案

你可以这样做:

var query = codes.Select(c => 
new
{
SplitArray = c.Split('.'), //to avoid multiple split
Value = c
})
.Select(c => new
{
Prefix = c.SplitArray.First(), //you can avoid multiple split if you split first and use it later
PostFix = c.SplitArray.Last(),
Value = c.Value,
})
.GroupBy(r => r.Prefix)
.Select(grp => new
{
Key = grp.Key,
Items = grp.Count() > 1 ? String.Join(",", grp.Select(t => t.PostFix)) : "",
Value = grp.First().Value,
});

它是这样工作的:

  • 在分隔符上拆分列表中的每个项目,并使用 PrefixPostfix 和原始 value 填充匿名类型
  • 稍后在 Prefix 上分组>
  • 之后使用 string.Join 选择值和后修复值

对于输出:

foreach (var item in query)
{
if(String.IsNullOrWhiteSpace(item.Items))
Console.WriteLine(item.Value);
else
Console.WriteLine("{0}({1})", item.Key, item.Items);
}

输出将是:

44(01,02,03,04,05,06,07,08)
46
47.10

关于c# - 识别和分组字符串集合中的相似项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31299340/

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