Say I have an array of strings like this:
string [] foos = {
"abc",
"def",
"ghi"
};
I want a new collection that contains each string and its reverse. So the result should be:
"abc",
"cba",
"def",
"fed",
"ghi",
"ihg"
I could just iterate through the array, but this is pretty clumsy:
string Reverse (string str)
{
return new string (str.Reverse ().ToArray ());
}
List<string> results = new List<string> ();
foreach (string foo in foos) {
results.Add (foo);
results.Add (Reverse(str));
}
Is there a way to do this in LINQ? Something like
var results = from foo in foos
select foo /* and also */ select Reverse(foo)
or
This maps each
fooinfoosto an array which consists of two elements:fooandReverse(foo). Then it concatenates all these two-element arrays into a single, large enumerable.{ { { "abc", { "abc", "abc", "cba", "cba", }, "def", => { => "def", "def", "fed", "fed", } "ghi", { "ghi", "ghi", "ihg", "ihg", } } } }If the order of your output is not so important, you can also concatenate the original array with the result of mapping each element in the original array using the Reverse method:
or
{ { { "abc", "abc", "abc", "def", => "def", => "def", "ghi", "ghi", "ghi", } } concat { "cba", "cba", "fed", "fed", "ihg", "ihg", } }