Ranges и Разность
От: ecinunice  
Дата: 14.10.16 11:41
Оценка:
Реализована ли операция разность для ranges?
Можно использовать ranges с типом DateTime?
Re: Ranges и Разность
От: Sinix  
Дата: 14.10.16 12:41
Оценка: 6 (1)
Здравствуйте, ecinunice, Вы писали:

E>Реализована ли операция разность для ranges?

E>Можно использовать ranges с типом DateTime?
Да, но релиза пока не было и да.

Чуть подробнее: ranges работает с любым типом, который реализует IComparable/IComparable<T>.
Для операций c составными диапазонами код в экспериментальной ветке, пока выглядит как-то так:
var x = Range.Create(0, 5).ToCompositeRange().Except(Range.Create(1, 2));
// [0..5]: { [0..1); (2..5] }
// от нуля включительно до одного исключительно + от одного исключительно до 5 включительно


.ToCompositeRange() тут явно лишний, код надо довести до ума, но у меня с свободным временем с начала августа перманентный %вычеркнуто цензурой%, а остальные камрады проект вообще забросили, сорри.

На этой и следующей неделе точно ничего не смогу сделать, где-до 24-го посмотрю. Напоминалку себе поставил.

P.S. У меня в загашнике куча расширений для работы с DateTime и с диапазонами дат, аля PrevDay()/NextYear()/FirstDayOfMonth()/date.ToMonthRange() etcetcetc, надо?
Re[2]: Ranges и Разность
От: Vasiliy2  
Дата: 14.10.16 13:36
Оценка:
Здравствуйте, Sinix, Вы писали:


S>P.S. У меня в загашнике куча расширений для работы с DateTime и с диапазонами дат, аля PrevDay()/NextYear()/FirstDayOfMonth()/date.ToMonthRange() etcetcetc, надо?


Надо.
Re[3]: Ranges и Разность
От: Sinix  
Дата: 14.10.16 13:43
Оценка:
Здравствуйте, Vasiliy2, Вы писали:


S>>P.S. У меня в загашнике куча расширений для работы с DateTime и с диапазонами дат, аля PrevDay()/NextYear()/FirstDayOfMonth()/date.ToMonthRange() etcetcetc, надо?


V>Надо.

Ок, тож добавлю.
Re[2]: Ranges и Разность
От: Товарищ  
Дата: 14.10.16 13:50
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Да, но релиза пока не было и да.


S>Чуть подробнее: ranges работает с любым типом, который реализует IComparable/IComparable<T>.

S>Для операций c составными диапазонами код в экспериментальной ветке, пока выглядит как-то так:
S>
S>var x = Range.Create(0, 5).ToCompositeRange().Except(Range.Create(1, 2));
S>// [0..5]: { [0..1); (2..5] }
S>// от нуля включительно до одного исключительно + от одного исключительно до 5 включительно
S>


А экспериментальная ветка в build не попадает?
В принципе, вопрос о целесообразности ее использования можно оставить разработчику со всеми вытекающими

S>P.S. У меня в загашнике куча расширений для работы с DateTime и с диапазонами дат, аля PrevDay()/NextYear()/FirstDayOfMonth()/date.ToMonthRange() etcetcetc, надо?


Надо
Спасибо
Re[3]: Ranges и Разность
От: Sinix  
Дата: 14.10.16 14:00
Оценка: 4 (1)
Здравствуйте, Товарищ, Вы писали:

Т>А экспериментальная ветка в build не попадает?

Т>В принципе, вопрос о целесообразности ее использования можно оставить разработчику со всеми вытекающими

Попадает, https://ci.appveyor.com/project/andrewvk/codejam/build/artifacts

целесообразность — тесты и CI

насчёт нюгета не помню, лично я себе завёл локальный для тестирования. Лень поднимать — в студии папку указываем и всё.
Re[2]: Ranges и Разность
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.10.16 14:34
Оценка:
Здравствуйте, Sinix, Вы писали:

S>P.S. У меня в загашнике куча расширений для работы с DateTime и с диапазонами дат, аля PrevDay()/NextYear()/FirstDayOfMonth()/date.ToMonthRange() etcetcetc, надо?


Надо. Еще надо преобразование таймспана в нормальную строку, русскую и английскую.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[3]: Ranges и Разность
От: Товарищ  
Дата: 14.10.16 15:07
Оценка:
Здравствуйте, AndrewVK, Вы писали:

Можете добавить публикацию CodeJam.Experimental на nuget?
Re[4]: Ranges и Разность
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.10.16 15:25
Оценка:
Здравствуйте, Товарищ, Вы писали:

Т>Можете добавить публикацию CodeJam.Experimental на nuget?


А смысл?
AVK Blog
Re[5]: Ranges и Разность
От: Товарищ  
Дата: 14.10.16 15:35
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>А смысл?


Такой же как и смысл nuget — управление бинарными зависимостями.
Развернуто — CodeJam.Experimental содержит конструктивный код — это так, и должныа быть возможность его ставить с помощью nuget.

Т.е. я СЕЙЧАС хочу использовать Range.Except и вынужден тащить в проект самопостроенную CodeJam.Experimental.dll
Re[6]: Ranges и Разность
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.10.16 15:52
Оценка:
Здравствуйте, Товарищ, Вы писали:

AVK>>А смысл?

Т>Такой же как и смысл nuget — управление бинарными зависимостями.
Т>Развернуто — CodeJam.Experimental содержит конструктивный код — это так, и должныа быть возможность его ставить с помощью nuget.
Т>Т.е. я СЕЙЧАС хочу использовать Range.Except и вынужден тащить в проект самопостроенную CodeJam.Experimental.dll

Видишь вверху тема прилеплена с описанием проекта? А там ссылочку "Nuget-фид с пакетами из ночных сборок"? Дальше нужно объяснять?
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[3]: Ranges и Разность
От: Sinix  
Дата: 14.10.16 16:20
Оценка:
Здравствуйте, AndrewVK, Вы писали:

S>>P.S. У меня в загашнике куча расширений для работы с DateTime и с диапазонами дат, аля PrevDay()/NextYear()/FirstDayOfMonth()/date.ToMonthRange() etcetcetc, надо?

AVK>Надо. Еще надо преобразование таймспана в нормальную строку, русскую и английскую.

Вот за последнее я точно не возьмусь, т.к. необходимости не было => фигню сотворю. Там как минимум падежи для минут/минуты/минута нужны + с возможностью поддержки других языков. Это проще поверх
Plural.net / humanizr привернуть.
Re[7]: Ranges и Разность
От: Товарищ  
Дата: 14.10.16 17:32
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Видишь вверху тема прилеплена с описанием проекта? А там ссылочку "Nuget-фид с пакетами из ночных сборок"? Дальше нужно объяснять?


Нужно, если не сложно.
Не работает install-package CodeJam.Experimental ни c https://ci.appveyor.com/nuget/codejam ни https://ci.appveyor.com/nuget/codejam.Experimental
Но работает
install-package https://ci.appveyor.com/api/buildjobs/yqo96k7j2litv0gn/artifacts/CodeJam.Experimental.1.0-alpha849.nupkg

спасибо Sinix за наводку

Какой из способов правильный?
Re[4]: Ranges и Разность
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.10.16 22:31
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Вот за последнее я точно не возьмусь, т.к. необходимости не было => фигню сотворю.


Да там все просто, надо просто универсализовать. Вот код с сайта:
private static string GetMinutesDeclension(int minutes)
{
    return minutes.GetDeclension("минута", "минуты", "минут");
}

private static string GetHoursDeclension(int hours)
{
    return hours.GetDeclension("час", "часа", "часов");
}

private static string GetDaysDeclension(int days)
{
    return days.GetDeclension("день", "дня", "дней");
}

private static string GetMonthDeclension(int month)
{
    return month.GetDeclension("месяц", "месяца", "месяцев");
}

public static string GetElapsedString(DateTime from, DateTime to, bool roughToDays = false, bool shortForm = false)
{
    var interval = to - from;

    if (roughToDays)
    {
        if (interval.TotalDays < 1)
            return "меньше дня";
    }
    else
    {
        if (interval.TotalMinutes < 1)
            return shortForm ? "<1 мин" : "меньше минуты";
        if (interval.TotalHours < 1)
        {
            var minutes = (int) Math.Round(interval.TotalMinutes);
            return
                "{0} {1}"
                    .FormatWith(minutes, shortForm ? "мин" : GetMinutesDeclension(minutes));
        }
        if (interval.TotalDays < 1)
        {
            var hours = (int) Math.Round(interval.TotalHours);
            return
                "{0} {1}"
                    .FormatWith(
                        hours,
                        GetHoursDeclension(hours));
        }
    }

    if (from.AddMonths(1) > to)
    {
        var days = (int)Math.Round(interval.TotalDays);
        return
            "{0} {1}"
                .FormatWith(
                    days,
                    GetDaysDeclension(days));
    }

    var totalMonth = (to.Month - from.Month) + (to.Year - from.Year) * 12;
    if (from.AddMonths(12) > to)
        return
            "{0} {1}"
                .FormatWith(
                    totalMonth,
                    shortForm ? "мес" : GetMonthDeclension(totalMonth));
    var totalYears = totalMonth / 12;
    var restMonth = totalMonth % 12;
    return
        "{0} {1} {2}"
            .FormatWith(
                totalYears,
                totalYears.GetDeclension("год", "года", "лет"),
                restMonth == 0
                    ? ""
                    : restMonth + (shortForm ? " мес" : " " + GetMonthDeclension(restMonth)));
}


S> Там как минимум падежи для минут/минуты/минута нужны


Не падежи, а склонения по грамматической категории числа. Да, они для каждого языка уникальны. Но хотя бы без них (см. для случая shortForm = true).

S>Plural.net / humanizr привернуть.


Вот уж не уверен.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[2]: Ranges и Разность
От: Товарищ  
Дата: 17.10.16 08:55
Оценка:
Здравствуйте, Sinix, Вы писали:

S>P.S. У меня в загашнике куча расширений для работы с DateTime и с диапазонами дат, аля PrevDay()/NextYear()/FirstDayOfMonth()/date.ToMonthRange() etcetcetc, надо?


Надо
Добавьте, пожалуйста, способ получения длияы Range/CompositeRange
Спасибо
Re[3]: Ranges и Разность
От: Sinix  
Дата: 25.10.16 07:10
Оценка:
Здравствуйте, Vasiliy2, Вы писали:

S>>P.S. У меня в загашнике куча расширений для работы с DateTime и с диапазонами дат, аля PrevDay()/NextYear()/FirstDayOfMonth()/date.ToMonthRange() etcetcetc, надо?

V>Надо.

Докинул. Кому чего не хватает — сорцы открыты, PR принимаем
Сорри, сезон горячий, времени нет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.