Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Group string values

I have this code

var myBuilder = new StringBuilder();

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

var text = myBuilder;

and using that I'm getting this text

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

myList returns this:

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

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

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

How can I concatenate it to string to display this:

AAA08 - BB08; AAA09 - BB09, BB10

I can do replace , to ; but can't get how to group these Numberto display only one and each SecondNumber right to him

like image 335
gsiradze Avatar asked Sep 23 '26 10:09

gsiradze


2 Answers

You can do this with Linq and 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);
like image 77
juharr Avatar answered Sep 26 '26 11:09

juharr


You can use GroupBy and String.Join:

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

I'm using string interpolation which is a C#6 feature, if you aren't using it replace $"{g.Key}..." with String.Format("{0}...", g.Key, ..).

like image 44
Tim Schmelter Avatar answered Sep 26 '26 10:09

Tim Schmelter