Link to home
Start Free TrialLog in
Avatar of Skale
Skale

asked on

How to rename duplicated strings in C#

Hello,

I'm using below code for getting some strings from excel sheet to use them in another worksheet's table as column headers, but some of strings has duplicated and i'd like to change their naming adding suffix _1, _2, ... , _n

  //Read Parameter Naming
  IEnumerable<ClosedXML.Excel.IXLCell> descList = wsRef.Column(1).CellsUsed().Skip(2).Where(c => !string.IsNullOrWhiteSpace(c.CellRight().Value.ToString()));
  i = 3;
  //Write Table Headers to Sheet
  foreach (ClosedXML.Excel.IXLCell desc in descList) { ws.Cell(1, i).Value = desc.CellRight().Value; i += 1; }

Open in new window


And this is my table column headers;

General
Extrusion by
Contour profile
Input by
SU2 file
Interpolation
Approximation parameter
Extrusion axis
Depth
Cross section
Input by
SU2 file
Input Function
Material side

Now as you can see some of them duplicated values and i'd like to change namings like below;

General
Extrusion by
Contour profile
Input by
SU2 file
Interpolation
Approximation parameter
Extrusion axis
Depth
Cross section
Input by_1
SU2 file_1
Input Function
Material side

Any help would be grateful. Thank you.
Avatar of Norie
Norie

Hakan

Probably not the most efficient way but how about something like this.
   var myList = new List<string> { "General","Extrusion by","Contour profile","Input by","SU2 file","Interpolation","Approximation parameter","Extrusion axis","Depth","Cross section","Input by","SU2 file","Input Function","Material side" };
    var myHeaders = new List<String> {};

    Dictionary <string, int> headers = new Dictionary <string, int>();

    foreach( var heading in myList){

      if(!headers.ContainsKey(heading)){
        headers.Add(heading, 0);
      }
      else{
        headers[heading] = headers[heading] + 1;
      }

      if(headers[heading]!=0){
        myHeaders.Add(heading + "_"+headers[heading]);
      }
      else{
        myHeaders.Add(heading);
      }

    }

    myHeaders.ForEach(i => Console.Write("{0}\n", i));

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of it_saige
it_saige
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial