我看到的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