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

Код: 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
21.12.2009, 07:04
    #36376874
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinqToObject Задачка преобразование значений в интервалы
так, если интервалы в 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
21.12.2009, 07:09
    #36376876
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinqToObject Задачка преобразование значений в интервалы
разъехалось децл
Код: 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
21.12.2009, 07:12
    #36376878
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinqToObject Задачка преобразование значений в интервалы
dataGridView1.DataSource = items.ToList();
это лишнее.
...
Рейтинг: 0 / 0
21.12.2009, 10:46
    #36377070
OldWoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinqToObject Задачка преобразование значений в интервалы
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
21.12.2009, 11:12
    #36377122
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinqToObject Задачка преобразование значений в интервалы
на оптимальность не претендую, но вот так получилось:

Код: 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
21.12.2009, 11:14
    #36377127
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinqToObject Задачка преобразование значений в интервалы
нет, не верно :(
...
Рейтинг: 0 / 0
21.12.2009, 11:19
    #36377141
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinqToObject Задачка преобразование значений в интервалы
бурька тренируется на козах в составлении линкю-запросов :)
...
Рейтинг: 0 / 0
21.12.2009, 11:24
    #36377152
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinqToObject Задачка преобразование значений в интервалы
МСУ бурька тренируется на козах в составлении линкю-запросов :)
Bill Great он же OldWoker раньше всех начал Linq курить. Всё наоборот должно быть.
...
Рейтинг: 0 / 0
23.12.2009, 22:56
    #36383375
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinqToObject Задачка преобразование значений в интервалы
В LINQ сложно оперировать следующим и предыдущим значением, им оптимально обрабатывать данные если каждый из элементов рассматривается независимо. Не нужно мудрить, задача решается элементарно простейшим циклом.
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LinqToObject Задачка преобразование значений в интервалы / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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