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.
C#

Avatar of undefined
Last Comment
it_saige

8/22/2022 - Mon
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
it_saige

Log in or sign up to see answer
Become an EE member today7-DAY FREE TRIAL
Members can start a 7-Day Free trial then enjoy unlimited access to the platform
Sign up - Free for 7 days
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.
Not exactly the question you had in mind?
Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.
ask a question
Experts Exchange is like having an extremely knowledgeable team sitting and waiting for your call. Couldn't do my job half as well as I do without it!
James Murphy