我期待從以下約束對Dictionary<string, DateTime>
創建批次:C#LINQ - 排序和分組一個詞典<字符串,日期時間>日期與最大羣規模
- 所有項目在批多少份額相同日期
- 單個批次中不能多於X個項目。如果有更多的日期相同的項目,則必須創建另一批次。
我已經制定了以下邏輯,但想知道是否有其他更簡潔的方式來做到這一點只是linq。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace dictionary_sort_by_value_test
{
class Program
{
static void Main(string[] args)
{
int maxBatchSize = 3;
Dictionary<string, DateTime> secs = new Dictionary<string, DateTime>();
secs.Add("6571 JT", new DateTime(2011, 1, 10));
secs.Add("6572 JT", new DateTime(2011, 1, 12));
secs.Add("6573 JT", new DateTime(2011, 1, 12));
secs.Add("6574 JT", new DateTime(2011, 1, 12));
secs.Add("6575 JT", new DateTime(2011, 1, 10));
secs.Add("6576 JT", new DateTime(2011, 1, 11));
secs.Add("6577 JT", new DateTime(2011, 1, 11));
secs.Add("6578 JT", new DateTime(2011, 1, 11));
secs.Add("6579 JT", new DateTime(2011, 1, 11));
var sorted = secs.OrderBy(o => o.Value).GroupBy(o => o.Value);
foreach (var date in sorted)
{
Console.Write("\nNew batch at {0} \n", date.Key);
int batchsize = 0;
foreach (var sec in date)
{
if (batchsize < maxBatchSize)
{
Console.Write(" {0} {1} \n", sec.Key, sec.Value);
batchsize++;
}
else
{
Console.Write("\nNew batch at {0} \n", date.Key);
Console.Write(" {0} {1} \n", sec.Key, sec.Value);
batchsize = 1;
}
}
}
}
}
}
我看不出哪裏/你如何創造你的代碼的新一批無論是。您正在計算批次的數量,但不是每個都創建一個新批次並將其添加到「結果」中。就我個人而言,我唯一能夠僅使用LINQ來做到這一點的方法就是再打破一個平局,這樣你也可以用它來分組。或者在IEnumerable上實現您的邏輯作爲擴展方法。這樣,它看起來像LINQ,感覺像LINQ,它將是LINQ,因爲無論如何這都是LINQ的實現方式。 –
2011-02-23 11:11:18