簡體   English   中英

基於規則的數據分組為段LINQ

[英]Rule based grouping of data into segments LINQ

我需要根據一些預設規則將數據分組為多個細分。 我輸入的數據間隔為5分鍾,有時超過5分鍾。 我需要將它們分成幾個部分進行進一步處理,但是由於某種原因,它對我不起作用。

數據示例:

11.01.2017 14:59:19 +01:00   value 15
11.01.2017 15:04:19 +01:00   value 17
11.01.2017 15:09:19 +01:00   value 14
11.01.2017 15:14:19 +01:00   value 11
11.01.2017 15:19:19 +01:00   value 0
11.01.2017 15:24:19 +01:00   value 8
---------here I want divide---------
11.01.2017 15:49:19 +01:00   value 6
11.01.2017 15:54:19 +01:00   value 14
11.01.2017 15:59:19 +01:00   value 5
11.01.2017 16:04:19 +01:00   value 3
11.01.2017 16:09:19 +01:00   value 5

這是示例代碼: http : //rextester.com/GQW59118

在示例中應該有兩個部分。

我需要這樣的東西

var grouped = dataList.GroupBy(tv => /*group when is dataList[i]-dataList[i-1]==5 */)
                .Select(g => g.OrderBy(tv => tv.dateTime).ToList()
                ).ToList();

任何人都可以請教嗎? (如果沒有循環)

嘗試這個:

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的值來更改interval

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM