Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Converting a generic list to a CSV string

I have a list of integer values (List) and would like to generate a string of comma delimited values. That is all items in the list output to a single comma delimted list.

My thoughts... 1. pass the list to a method. 2. Use stringbuilder to iterate the list and append commas 3. Test the last character and if it's a comma, delete it.

What are your thoughts? Is this the best way?

How would my code change if I wanted to handle not only integers (my current plan) but strings, longs, doubles, bools, etc, etc. in the future? I guess make it accept a list of any type.

like image 299
DenaliHardtail Avatar asked Dec 11 '09 18:12

DenaliHardtail


1 Answers

It's amazing what the Framework already does for us.

List<int> myValues; string csv = String.Join(",", myValues.Select(x => x.ToString()).ToArray()); 

For the general case:

IEnumerable<T> myList; string csv = String.Join(",", myList.Select(x => x.ToString()).ToArray()); 

As you can see, it's effectively no different. Beware that you might need to actually wrap x.ToString() in quotes (i.e., "\"" + x.ToString() + "\"") in case x.ToString() contains commas.

For an interesting read on a slight variant of this: see Comma Quibbling on Eric Lippert's blog.

Note: This was written before .NET 4.0 was officially released. Now we can just say

IEnumerable<T> sequence; string csv = String.Join(",", sequence); 

using the overload String.Join<T>(string, IEnumerable<T>). This method will automatically project each element x to x.ToString().

like image 172
jason Avatar answered Sep 20 '22 07:09

jason