组字符串值

Group string values

我有这个代码

var myBuilder = new StringBuilder();

foreach (var item in myList)
{
  myBuilder.Append(item.Number).Append(" - ").Append(item.SecondNumber).Append(", ");
}

var text = myBuilder;

并使用它我得到了这个文本

AAA08 - BB08, AAA09 - BB09, AAA09 - BB10,

myList returns 这个:

{ Number = "AAA08", SecondNumber = "BB08" }

{ Number = "AAA09", SecondNumber = "BB09" }

{ Number = "AAA09", SecondNumber = "BB10" }

如何将它连接到字符串以显示:

AAA08 - BB08; AAA09 - BB09, BB10

我可以将 , 替换为 ; 但不知道如何对这些 Number 进行分组以仅显示一个 SecondNumber 对他的权利

您可以使用 Linq 和 string.Join

var grouped = myList
    .GroupBy(x => x.Number)
    .Select(g => g.Key + " - " + string.Join(", ", g.Select(x => x.SecondNumber)))
var text = string.Join("; ", grouped);

您可以使用 GroupByString.Join:

var groupedNumbers= myList
    .GroupBy(x => x.Number)
    .Select(g => $"{g.Key} - {String.Join(", ", g.Select(x => x.SecondNumber))}");
string result = String.Join("; ", groupedNumbers);

我正在使用字符串插值,这是 C#6 的一项功能,如果您不使用它,请将 $"{g.Key}..." 替换为 String.Format("{0}...", g.Key, ..)

当您获得 Number 时,遍历 myList 以查找 Number 的所有实例,然后获取每个对应的 SecondNumber 并将其附加到您的字符串。

在构建最终字符串之前,您可能需要先使用以下代码对数组进行分组: var groupedList = myList.GroupBy(x => x.Number) 然后使用该分组列表获取正确的字符串:

foreach (var item in groupedList) 
{
    myBuilder.Append(item.Number).Append(" - ").Append(item.Select(x => x.SecondNumber).Join(", ")).Append("; ");
}