我有一个函数,我想从中创建另一个函数f(),以便对于原始枚举中的每个字符串,新的字符串具有和.元素的顺序很重要.IEnumerable<string>IEnumerable<string>ssf(s)
例:
IEnumerable<string> given = { "A", "B", "C" };
IEnumerable<string> wanted = { "A", f("A"), "B", f("B"), "C", f("C") };
Run Code Online (Sandbox Code Playgroud)
有没有办法使用LINQ 优雅地做到这一点?(如果没有,那么最优雅的方法是什么?)
var wanted = given.SelectMany(s => new[] {s, f(s)} );
Run Code Online (Sandbox Code Playgroud)
Enumerable.SelectMany将序列的每个元素投影到另一个序列,然后将得到的序列序列展平为单个序列.
在查询语法中:
var wanted = from s in given
from item in new[] {s, f(s)}
select item;
Run Code Online (Sandbox Code Playgroud)
另一种选择(如果订购不重要):
var wanted = given.Concat(given.Select(f)); // C# 4
var wanted = given.Concat(given.Select(s => f(s))); // C# 3
Run Code Online (Sandbox Code Playgroud)