views:

69

answers:

3

Hey, I have an array of strings and I want to replace a certain substring in each of those elements. Is there an easy way to do that besides iterating the array explicitly?

Thanks :-)

+2  A: 

You could iterate the array implicitly

arrayOfStrings = arrayOfStrings.Select(s => s.Replace("abc", "xyz")).ToArray();
David Hedlund
I tried using foreach, can I use it as well? Could make it work so far though...
grady
Strictly this does not replace elements in the array, it creates a new array with the replaced elements in. This makes i difference if the original arrayOfStrings was referenced elsewhere, like if arrayOfStrings was an in parameter in a method.
Albin Sunnanbo
@grady you can not use foreach(var s in arrayOfStrings) {s = s.Replace("foo", "bar"); } since you are not allowed to modify the foreach variable.
Albin Sunnanbo
+5  A: 

Ultimately, anything you do is going to do exactly that anyway. A simple for loop should be fine. There are pretty solutions involving lambdas, such as Array.ConvertAll / Enumerable.Select, but tbh it isn't necessary:

for(int i = 0 ; i < arr.Length ; i++) arr[i] = arr[i].Replace("foo","bar");

(the for loop has the most efficient handling for arrays; and foreach isn't an option due to mutating the iterator variable)

Marc Gravell
Yeah, do the simplest thing - you can't go wrong that way
Jaco Pretorius
A: 

I want to extend this...lets say the array was converted to a List and contains dates as strings after I did the replace stuff. Can I covert those strings to DateTime using List.foreach and only get the latest 12 entries (latest date and downwards).

Thanks

grady
LINQ... list.OrderByDescending(item => DateTime.Parse(item)).Take(12);
Marc Gravell