c# – 使用给定枚举的所有元素进行枚举,并在LINQ中插入其他元素

我有一个函数f()和一个IEnumerable< string>我想从中创建另一个IEnumerable< string>因此,对于原始枚举中的每个字符串,新的字符串具有s和f(s).元素的顺序很重要.

例:

IEnumerable<string> given  = { "A",         "B",         "C"         };
IEnumerable<string> wanted = { "A", f("A"), "B", f("B"), "C", f("C") };

有没有办法使用LINQ优雅地做到这一点? (如果没有,那么最优雅的方法是什么?)

最佳答案
var wanted = given.SelectMany(s => new[] {s, f(s)} );

Enumerable.SelectMany将序列的每个元素投影到另一个序列,然后将得到的序列序列展平为单个序列.

在查询语法中:

var wanted = from s in given
             from item in new[] {s, f(s)}
             select item;

另一种选择(如果订购不重要):

var wanted = given.Concat(given.Select(f)); // C# 4
var wanted = given.Concat(given.Select(s => f(s)));  // C# 3

转载注明原文:c# – 使用给定枚举的所有元素进行枚举,并在LINQ中插入其他元素 - 代码日志