2010-10-03 58 views
6

说我有string就像这样的数组:在LINQ中,我可以选择多个项目吗?

string [] foos = { 
    "abc", 
    "def", 
    "ghi" 
}; 

我想包含每个字符串和反面的新的集合。所以结果应该是:

"abc", 
    "cba", 
    "def", 
    "fed", 
    "ghi", 
    "ihg" 

我可以通过数组只是重复,但这是很笨拙:

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)); 
} 

有没有办法在LINQ做到这一点?像

var results = from foo in foos 
    select foo /* and also */ select Reverse(foo) 

回答

13
var result = from foo in foos 
      from x in new string[] { foo, Reverse(foo) } 
      select x; 

var result = foos.SelectMany(foo => new string[] { foo, Reverse(foo) }); 

某事,这在每个foosfoo映射到由两个元件的阵列:fooReverse(foo)。然后它将所有这些两元素数组连接成一个大的枚举类型。

 
{       {        { 
"abc",       { 
           "abc",     "abc", 
           "cba",     "cba", 
           }, 
"def",   =>    {    => 
           "def",     "def", 
           "fed",     "fed", 
           } 
"ghi",       { 
           "ghi",     "ghi", 
           "ihg",     "ihg", 
           } 
}       }        } 

如果输出的顺序并不那么重要,你也可以连接原阵列使用逆向方法原始数组中的每个元素映射的结果:

var result = foos.Concat(from foo in foos select Reverse(foo)); 

var result = foos.Concat(foos.Select(Reverse)); 
 
{        {        { 
"abc",       "abc",       "abc", 
"def",   =>    "def",   =>    "def", 
"ghi",       "ghi",       "ghi", 
}        } 
           concat 
           { 
           "cba",       "cba", 
           "fed",       "fed", 
           "ihg",       "ihg", 
           }        } 

+0

谢谢!我最终使用了'foos.Concat(foos.Select(Reverse));',因为顺序并不重要,但是关于嵌套'from'子句的东西是留给未来的好消息。 – 2010-10-04 00:21:29

0

我认为是按照你以后有什么:

static void Main(string[] args) 
    { 
     string[] foos = { "abc", "def", "ghi" }; 
     string[] result = foos.Union(foos.Select(A=> new string(A.ToCharArray().Reverse().ToArray()))).ToArray(); 
     foreach(string a in result) Debug.WriteLine(a); 
    } 

“招数”:

  • 使用UNION来生成一个顺序。
  • 将字符串到一个char [],和反向序列
  • 使用字符串构造这需要一个char [],以建立一个新的字符串序列
相关问题