假设我有一个string像这样的数组:
string [] foos = {
"abc",
"def",
"ghi"
};
Run Code Online (Sandbox Code Playgroud)
我想要一个包含每个字符串及其反向的新集合.所以结果应该是:
"abc",
"cba",
"def",
"fed",
"ghi",
"ihg"
Run Code Online (Sandbox Code Playgroud)
我可以遍历数组,但这非常笨拙:
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));
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在LINQ中执行此操作?就像是
var results = from foo in foos
select foo /* and also */ select Reverse(foo)
Run Code Online (Sandbox Code Playgroud)
dtb*_*dtb 13
var result = from foo in foos
from x in new string[] { foo, Reverse(foo) }
select x;
Run Code Online (Sandbox Code Playgroud)
要么
var result = foos.SelectMany(foo => new string[] { foo, Reverse(foo) });
Run Code Online (Sandbox Code Playgroud)
此将每个foo在foos到由两个元件的阵列:foo和Reverse(foo).然后它将所有这些双元素数组连接成一个大的可枚举数组.
{ { {
"abc", {
"abc", "abc",
"cba", "cba",
},
"def", => { =>
"def", "def",
"fed", "fed",
}
"ghi", {
"ghi", "ghi",
"ihg", "ihg",
}
} } }
如果输出的顺序不那么重要,您还可以使用Reverse方法将原始数组与映射原始数组中每个元素的结果连接起来:
var result = foos.Concat(from foo in foos select Reverse(foo));
Run Code Online (Sandbox Code Playgroud)
要么
var result = foos.Concat(foos.Select(Reverse));
Run Code Online (Sandbox Code Playgroud)
{ { {
"abc", "abc", "abc",
"def", => "def", => "def",
"ghi", "ghi", "ghi",
} }
concat
{
"cba", "cba",
"fed", "fed",
"ihg", "ihg",
} }
| 归档时间: |
|
| 查看次数: |
3680 次 |
| 最近记录: |