我看到的SelectMany的所有例子都是扁平数组的数组等等。我对这个问题有不同的看法。如何通过Linq将一个类型(而不是一个枚举)展平?
我有一个类型的数组,我想将该类型的内容提取到一个流中。这里是我的示例代码:
public class MyClass
{
class Foo
{
public int X, Y;
}
static IEnumerable<int> Flatten(Foo foo)
{
yield return foo.X;
yield return foo.Y;
}
public static void RunSnippet()
{
var foos = new List<Foo>()
{
new Foo() { X = 1, Y = 2 },
new Foo() { X = 2, Y = 4 },
new Foo() { X = 3, Y = 6 },
};
var query = foos.SelectMany(x => Flatten(x));
foreach (var x in query)
{
Console.WriteLine(x);
}
}
}
这个输出,我想什么:1,2,2,4,3,6,
我可以消除收益率?我知道支持这件事的管道是不平凡的,而且可能有很大的成本。在linq中可以做到这一切吗?
我觉得我非常接近答案,只是缺少关键字来搜索。 :)
UPDATE:
正如下面的答复中提到,它的工作原理使用是这样的:
foos.SelectMany(x => new[] { x.X, x.Y });
不过,我希望能找到一个方法来做到这一点,而不会产生N/2个临时阵列。我正在针对大型选择集运行此操作。
这有什么错产量的解决方案? – 2010-01-29 23:46:32
我读过一篇文章,谈论如何在下面的收益率,它不便宜。我还想在工作的完成位置旁边放置一些内容,而不是要求完全独立的功能。 Lambdas ftw。 – scobi 2010-02-02 15:50:22
“不便宜”从哪里来?你有链接到文章? – 2010-02-03 10:00:02