好的。標題可能有點混亂,但在這裏就是我試圖做LINN中的維恩圖分類
我有一系列的自然數
var series = Enumerable.Range(1, 100)
現在我想用GroupBy
把數到3組,總理的,偶,奇
series.Select(number => {
var type = "";
if (MyStaticMethods.IsPrime(number))
{
Type = "prime";
}
else if (number % 2 == 0)
{
type = "Even";
}
else
{
type = "Odd";
}
return new { Type=type, Number = number };
}).GroupBy(n => n.Type);
現在上面的查詢會錯過分類素數是偶數或奇數到兩個類別,他們將只是在「原」組。有沒有辦法讓上述選擇產生多個數字?
我可以嘗試類似以下內容,但它需要額外的扁平化序列。
series.Select(number => {
var list = new List<int>();
if (MyStaticMethods.IsPrime(number))
{
list.Add(new { Type="prime", Number = number });
}
if (number % 2 == 0)
{
list.Add(new { Type="even", Number = number });
}
else
{
list.Add(new { Type="odd", Number = number });
}
return list;
})
.SelectMany(n => n)
.GroupBy(n => n.Type);
上述代碼解決了我的問題,有沒有更好的方法可以讓我的代碼看起來更「功能性」?