powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LinqToObject Задачка преобразование значений в интервалы
10 сообщений из 10, страница 1 из 1
LinqToObject Задачка преобразование значений в интервалы
    #36376553
OldWoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем! задачка - есть словарик последовательных дней за месяц и скажем кол-во посететелей в этот день

Код: plaintext
Dictionary<DateTime, int> amtByDays = new Dictionary<DateTime, int>(); 

как одним выражением превратить этот словарик в набор интервалов
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
class Segment
{
public int Amount {get; set;}
public DateTime From{get; set;}
public DateTime To {get; set;}

}
List<Segment> items = amtByDays . что тут наптсать ?
...
Рейтинг: 0 / 0
LinqToObject Задачка преобразование значений в интервалы
    #36376874
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так, если интервалы в 1 день ты имел в виду.
(Так-то можно множество интервалов построить на заданном отрезке, разной длинны...)
Код: plaintext
1.
2.
3.
4.
5.
6.
Dictionary<DateTime, int> amtByDays = new Dictionary<DateTime, int>();
            amtByDays.Add(DateTime.Parse("01.01.01"), 10);
            amtByDays.Add(DateTime.Parse("02.01.01"), 20);
            amtByDays.Add(DateTime.Parse("03.01.01"), 14);
            List<Segment> items = amtByDays.Select(s => new Segment { Amount = s.Value, From = s.Key, To = DateTime.Parse(s.Key.ToString()).AddDays(1) }).ToList();
            dataGridView1.DataSource = items.ToList();
...
Рейтинг: 0 / 0
LinqToObject Задачка преобразование значений в интервалы
    #36376876
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разъехалось децл
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Dictionary<DateTime, int> amtByDays = new Dictionary<DateTime, int>();
amtByDays.Add(DateTime.Parse("01.01.01"), 10);
amtByDays.Add(DateTime.Parse("02.01.01"), 20);
amtByDays.Add(DateTime.Parse("03.01.01"), 14);
List<Segment> items = amtByDays
   .Select(s => new Segment 
                    { 
                      Amount = s.Value, 
                      From = s.Key, 
                      To = DateTime.Parse(s.Key.ToString()).AddDays(1) 
                    }
           )
   .ToList();
dataGridView1.DataSource = items.ToList();
...
Рейтинг: 0 / 0
LinqToObject Задачка преобразование значений в интервалы
    #36376878
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dataGridView1.DataSource = items.ToList();
это лишнее.
...
Рейтинг: 0 / 0
LinqToObject Задачка преобразование значений в интервалы
    #36377070
OldWoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bured,
Спасибо! М.б. я не совсем чётко определил задачу - имелось ввиду что интервал создаются когда значение меняется - то есть нужно найти даты от и до когда кол-во одинаковое

Код: plaintext
1.
2.
3.
4.
5.
6.
amtByDays.Add(DateTime.Parse("01.01.01"), 10);
amtByDays.Add(DateTime.Parse("02.01.01"), 10);
amtByDays.Add(DateTime.Parse("03.01.01"), 10);
amtByDays.Add(DateTime.Parse("04.01.01"), 20);
amtByDays.Add(DateTime.Parse("05.01.01"), 1);
amtByDays.Add(DateTime.Parse("06.01.01"), 1);
то есть должны получиться следующие интервалы
Код: plaintext
1.
2.
3.
с 02.01.01 по 03.01.01 - 10
с 04.01.01 по 04.01.01 - 20
с 05.01.01 по 06.01.01 - 1
...
Рейтинг: 0 / 0
LinqToObject Задачка преобразование значений в интервалы
    #36377122
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на оптимальность не претендую, но вот так получилось:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Dictionary<DateTime, int> amtByDays = new Dictionary<DateTime, int>();
            amtByDays.Add(DateTime.Parse("01.01.01"), 10);
            amtByDays.Add(DateTime.Parse("02.01.01"), 10);
            amtByDays.Add(DateTime.Parse("03.01.01"), 10);
            amtByDays.Add(DateTime.Parse("04.01.01"), 20);
            amtByDays.Add(DateTime.Parse("05.01.01"), 1);
            amtByDays.Add(DateTime.Parse("06.01.01"), 1);
            amtByDays.Add(DateTime.Parse("07.01.01"), 1);
            amtByDays.Add(DateTime.Parse("08.01.01"), 1);

List<Segment> items2 = amtByDays
                .SelectMany(d => amtByDays
                    .Where(a => a.Value == d.Value & (DateTime.Parse(a.Key.ToString()) - DateTime.Parse(d.Key.ToString())).Days <2))
                    .GroupBy(a => a.Value).OrderBy(a=>a.First().Key)
                    .Select(g => 
                        new Segment { 
                            Amount = g.First().Value, 
                            From = g.First().Key, 
                            To = g.Last().Key 
                                    }).ToList();
            dataGridView1.DataSource = items2;
...
Рейтинг: 0 / 0
LinqToObject Задачка преобразование значений в интервалы
    #36377127
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет, не верно :(
...
Рейтинг: 0 / 0
LinqToObject Задачка преобразование значений в интервалы
    #36377141
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бурька тренируется на козах в составлении линкю-запросов :)
...
Рейтинг: 0 / 0
LinqToObject Задачка преобразование значений в интервалы
    #36377152
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ бурька тренируется на козах в составлении линкю-запросов :)
Bill Great он же OldWoker раньше всех начал Linq курить. Всё наоборот должно быть.
...
Рейтинг: 0 / 0
LinqToObject Задачка преобразование значений в интервалы
    #36383375
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В LINQ сложно оперировать следующим и предыдущим значением, им оптимально обрабатывать данные если каждый из элементов рассматривается независимо. Не нужно мудрить, задача решается элементарно простейшим циклом.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LinqToObject Задачка преобразование значений в интервалы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]