asp.net 如何修改重复值的字符串列表?

kcrjzv8t  于 2022-12-01  发布在  .NET
关注(0)|答案(2)|浏览(109)

我正在处理的项目是asp.net mvc核心。我想将重复值的字符串列表替换为一个用逗号分隔的值,

List<string> stringList = surveylist.Split('&').ToList();

I have string list这将生成以下输出:

7=55
6=33
5=MCC
4=GHI
3=ABC
1003=DEF
1003=ABC
1=JKL

我想这样改变输出

7=55
6=33
5=MCC
4=GHI
3=ABC
1003=DEF,ABC
1=JKL

重复的项目值应以逗号分隔。

hc2pp10m

hc2pp10m1#

大概有20种方法可以做到这一点。其中一个简单的方法是:

List<string> newStringList = stringList
  .Select(a => new { KeyValue = a.Split("=") })
  .GroupBy(a => a.KeyValue[0])
  .Select(a => $"{a.Select(x => x.KeyValue[0]).First()}={string.Join(",", a.Select(x => x.KeyValue[1]))}")
  .ToList();
bxgwgixi

bxgwgixi2#

看一下输出。注意,等号将每个字符串分隔成一个 * 键-值对 *。考虑一下您希望如何处理这个问题。字符串列表真的是您希望构建的结构吗?您可以采取不同的方法,使用KeyValuePairs列表或Dictionary来代替。
如果你真的需要用List来实现,那么看看LINQ's Enumerable提供的方法,也就是SelectGroupBy
您可以使用Select在等号上再拆分一次:.Select(s => s.Split('=')) .
可以使用GroupBy按键对值进行分组:.GroupBy(pair => pair[0]) .
要将其重新连接到字符串,可以再次使用Select
最终结果可能如下所示:

List<string> stringList = values.Split('&')
    .Select(s => {
        string[] pair = s.Split('=');
        return new { Key = pair[0], Value = pair[1] };
    })
    .GroupBy(pair => pair.Key)
    .Select(g => string.Concat(
        g.Key,
        '=',
        string.Join(
            ", ",
            g.Select(pair => pair.Value)
        )
    ))
    .ToList();

组包含对,因此您需要选择每个对的值并将它们连接成字符串。

相关问题