我需要根据一些预设规则将数据分组。我输入数据的间隔为5分钟,有时超过5分钟。 我需要把它们分成几段进行进一步处理,但由于某些原因它对我不起作用。
数据示例:
var grouped = dataList.GroupBy(tv => /*group when is dataList[i]-dataList[i-1]==5 */)
.Select(g => g.OrderBy(tv => tv.dateTime).ToList()
).ToList();
以下是示例代码:http://rextester.com/GQW59118
示例中应该有两个部分。
我需要这样的东西
{{1}}
任何人都可以提出建议吗? (如果没有循环)
答案 0 :(得分:0)
试试这个:
public class Program
{
public static void Main(string[] args)
{
List<TimeValue> ttcaList = new List<TimeValue>();
Random s = new Random();
DateTimeOffset dto = DateTimeOffset.Now;
for (int i = 0; i < 6; i++)
{
ttcaList.Add(new TimeValue(dto.AddMinutes(i*5), s.Next(0, 20)));
}
for (int i = 0; i < 5; i++)
{
ttcaList.Add(new TimeValue(dto.AddMinutes(10*5).AddMinutes(i*5), s.Next(0, 20)));
}
foreach (var item in ttcaList)
{
Console.WriteLine(item.Time+" value "+ item.Value);
}
List<List<TimeValue>> grouped = new List<List<TimeValue>>();
var interval = 5;
DateTimeOffset lastTime = new DateTimeOffset();
foreach (var item in ttcaList)
{
if (grouped.Count == 0)
{
grouped.Add(new List<TimeValue>() {item});
lastTime = item.Time;
}
else
{
if ((item.Time - lastTime).TotalMinutes <= interval)
grouped.Last().Add(item);
else
grouped.Add(new List<TimeValue>() {item});
lastTime = item.Time;
}
}
Console.WriteLine("\n\n grouped data");
foreach (var skup in grouped)
{
Console.WriteLine("\t\t group");
foreach (var item in skup)
{
Console.WriteLine(item.Time+" value "+ item.Value);
}
}
}
您有5分钟的时间间隔,您可以通过更改interval