Минутка WTF-8: не делайте так.
От: Sinix  
Дата: 28.04.16 14:04
Оценка: 3 (1)
Продолжаем наступать на грабли
Автор: Sinix
Дата: 26.04.16


var offsets = GetSomeOffsets();

var max = offsets.Aggregate((x, y) => x > y ? x : y);


Вопрос стандартный: что не так-то?
Подсказка: на это раз вопрос не про производительность.

Просьбы тож:
1. Спойлеры — под кат!
2. Подключайтесь Нужно боольше вопросов
Отредактировано 07.01.2017 16:46 Sinix . Предыдущая версия . Еще …
Отредактировано 28.04.2016 14:06 Sinix . Предыдущая версия .
минутка wtf
Re: Минутка WTF-8: не делайте так.
От: -n1l-  
Дата: 28.04.16 14:15
Оценка:
Почему просто не использовать Max?
Re: Минутка WTF-8: не делайте так.
От: TimurSPB Интернет  
Дата: 28.04.16 14:16
Оценка:
S>Вопрос стандартный: что не так-то?
Непонятно что должен делать код
Make flame.politics Great Again!
Re[2]: Минутка WTF-8: не делайте так.
От: -n1l-  
Дата: 28.04.16 14:18
Оценка: +1
Код ищет максимальный элемент коллекции.
Re[2]: Минутка WTF-8: не делайте так.
От: Sinix  
Дата: 28.04.16 14:35
Оценка:
Здравствуйте, -n1l-, Вы писали:

N>Почему просто не использовать Max?


Потому что это максимально упрощённый пример, в реальном коде был цикл.
Re: Минутка WTF-8: не делайте так.
От: Codechanger Россия  
Дата: 28.04.16 15:03
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Продолжаем наступать на грабли
Автор: Sinix
Дата: 26.04.16


S>
S>var offsets = GetSomeOffsets();

S>var max = offsets.Aggregate((x, y) => x > y ? x : y);
S>


S>Вопрос стандартный: что не так-то?

S>Подсказка: на это раз вопрос не про производительность.

  Вариант ответа
Подозреваю, что там что-то с реализацией IComparable должно быть связано.
Re: Минутка WTF-8: не делайте так.
От: artelk  
Дата: 28.04.16 15:17
Оценка: 22 (1) +1
Здравствуйте, Sinix, Вы писали:

S>
S>var offsets = GetSomeOffsets();
S>var max = offsets.Aggregate((x, y) => x > y ? x : y);
S>

S>Вопрос стандартный: что не так-то?

На пустой последовательности падает?
Re[3]: Минутка WTF-8: не делайте так.
От: -n1l-  
Дата: 28.04.16 15:25
Оценка:
Цикл который ищет максимальный элемент?
Re[4]: Минутка WTF-8: не делайте так.
От: Sinix  
Дата: 28.04.16 15:46
Оценка:
Здравствуйте, -n1l-, Вы писали:

S>>Потому что это максимально упрощённый пример, в реальном коде был цикл.

N>Цикл который ищет максимальный элемент?
Вот давайте дождёмся ответа, а потом я уже буду спойлерить
Re[2]: Минутка WTF-8: не делайте так.
От: Sinix  
Дата: 28.04.16 15:50
Оценка:
Здравствуйте, artelk, Вы писали:


S>>Вопрос стандартный: что не так-то?


A>На пустой последовательности падает?

Вот про этот момент я не подумал, но в принципе это не критично. Max() тоже бросает исключение для некоторых типов.
Re[2]: Минутка WTF-8: не делайте так.
От: Sinix  
Дата: 28.04.16 15:51
Оценка:
Здравствуйте, Codechanger, Вы писали:

C>[cut=Вариант ответа]

Тепло
Re[3]: Минутка WTF-8: не делайте так.
От: -n1l-  
Дата: 28.04.16 16:31
Оценка: +1
Переопределенные операторы > и < могут возвращать все что угодно, а не только bool для объектов которые могут использоваться в aggregate.
Re[4]: Минутка WTF-8: не делайте так.
От: Sinix  
Дата: 28.04.16 17:01
Оценка:
Здравствуйте, -n1l-, Вы писали:

N>Переопределенные операторы > и < могут возвращать все что угодно, а не только bool для объектов которые могут использоваться в aggregate.

Ещё теплее. Подсказка: тип значений — примитив.
Re[5]: Минутка WTF-8: не делайте так.
От: -n1l-  
Дата: 28.04.16 17:08
Оценка:
StackOverflow на больших кол-вах данных?
Re[6]: Минутка WTF-8: не делайте так.
От: -n1l-  
Дата: 28.04.16 17:09
Оценка:
Хотя нет, глупость сморозил.
Re[5]: Минутка WTF-8: не делайте так.
От: Codechanger Россия  
Дата: 28.04.16 17:11
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, -n1l-, Вы писали:


N>>Переопределенные операторы > и < могут возвращать все что угодно, а не только bool для объектов которые могут использоваться в aggregate.

S>Ещё теплее. Подсказка: тип значений — примитив.

Надо глянуть, могут ли переопределенные операторы возвращать значения другого типа
Re[6]: Минутка WTF-8: не делайте так.
От: Sinix  
Дата: 28.04.16 17:13
Оценка:
Здравствуйте, -n1l-, Вы писали:

N>StackOverflow на больших кол-вах данных?

А это с чего бы? там ни рекурсии, ни stackalloc нету. Не оно.
Re[5]: Минутка WTF-8: не делайте так.
От: -n1l-  
Дата: 28.04.16 17:20
Оценка:
Может быть возвращается объект, упаковка-распаковка, но вопрос был не про производительность.
Re[6]: Минутка WTF-8: не делайте так.
От: Sinix  
Дата: 28.04.16 17:23
Оценка:
Здравствуйте, Codechanger, Вы писали:



N>>>Переопределенные операторы > и < могут возвращать все что угодно, а не только bool для объектов которые могут использоваться в aggregate.

S>>Ещё теплее. Подсказка: тип значений — примитив.

C>Надо глянуть, могут ли переопределенные операторы возвращать значения другого типа

Конечно могут
            public static C operator >(C a, C b)
            {
                return null;
            }
            public static C operator <(C a, C b)
            {
                return null;
            }

            static void PleaseStop()
            {
                C a = new C();
                C b = a < a;
                ...
            }


Не, конечно из принципа можно и не так упороться
Автор: Sinix
Дата: 19.08.15
, но в этой серии постов все сюрпризы — из реального кода, неформат получается.

Так что оператор и тип стандартные.
Re[6]: Минутка WTF-8: не делайте так.
От: Sinix  
Дата: 28.04.16 17:25
Оценка:
Здравствуйте, -n1l-, Вы писали:

N>Может быть возвращается объект, упаковка-распаковка, но вопрос был не про производительность.

Ок,

  подсказка 2
На каких из примитивных типов операторы сравнения могут выдавать неочевидные результаты?


И нет, вопрос не про перформанс.
Отредактировано 28.04.2016 17:27 Sinix . Предыдущая версия . Еще …
Отредактировано 28.04.2016 17:26 Sinix . Предыдущая версия .
Re: Минутка WTF-8: не делайте так.
От: samius Япония http://sams-tricks.blogspot.com
Дата: 28.04.16 17:38
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Подсказка: на это раз вопрос не про производительность.

  спойлер
Может быть речь о том, что цикл работал не по IEnumerable реализации, в то время как IEnumerable либо не была реализована, либо была реализована как-то по-другому?
Re: Минутка WTF-8: не делайте так.
От: rameel https://github.com/rsdn/CodeJam
Дата: 28.04.16 17:49
Оценка: 3 (1) +1
Здравствуйте, Sinix, Вы писали:

  Скрытый текст
Ну если речь идет не о производительности, и вопрос с подвохом, то случайно не сравнение для double/float имеется в виду? Ну там double.NaN, double.PositiveInfinite и т.п. ?
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[2]: Минутка WTF-8: не делайте так.
От: rameel https://github.com/rsdn/CodeJam
Дата: 28.04.16 17:52
Оценка: +1 :)
Здравствуйте, rameel, Вы писали:

R>Ну если речь идет не о производительности, и вопрос с подвохом, то случайно не сравнение для double/float имеется в виду? Ну там double.NaN, double.PositiveInfinite и т.п. ?


Похоже был прав, увидел правки в проекте

ЗЫ. И в форуме библиотеки
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Отредактировано 30.04.2016 22:37 VladD2 . Предыдущая версия .
Re[2]: Минутка WTF-8: не делайте так.
От: Sinix  
Дата: 28.04.16 17:56
Оценка:
Здравствуйте, rameel, Вы писали:

R>Ну если речь идет не о производительности, и вопрос с подвохом...


Бинго! Ну и раз уже очевидно — на каких ещё типах может вылезти похожий баг?

Ну и обещанный спойлер для ув -n1-
  спойлер:
Таки да, цикл который ищет максимальный элемент
Автор: AndrewVK
Дата: 28.04.16
.
Re[3]: Минутка WTF-8: не делайте так.
От: Jack128  
Дата: 28.04.16 18:03
Оценка: 81 (2) +2
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, rameel, Вы писали:


R>>Ну если речь идет не о производительности, и вопрос с подвохом...


S>Бинго! Ну и раз уже очевидно — на каких ещё типах может вылезти похожий баг?


  Скрытый текст
Nullable<XXX>, очевидно
Re[3]: Минутка WTF-8: не делайте так.
От: rameel https://github.com/rsdn/CodeJam
Дата: 28.04.16 18:07
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>Ну и раз уже очевидно — на каких ещё типах может вылезти похожий баг?


Да вроде все, ну разве что DateTime может быть с разными зонами.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[3]: Минутка WTF-8: не делайте так.
От: samius Япония http://sams-tricks.blogspot.com
Дата: 28.04.16 18:13
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, -n1l-, Вы писали:


N>>Почему просто не использовать Max?


S>Потому что это максимально упрощённый пример, в реальном коде был цикл.

Значит, не максималььно уппрощенный. Aggregate в нем явно избыточен.
Re[3]: Минутка WTF-8: не делайте так.
От: rameel https://github.com/rsdn/CodeJam
Дата: 28.04.16 18:26
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Ну и раз уже очевидно — на каких ещё типах может вылезти похожий баг?


Не так очевидно, раз пропустили этот момент) Заставило задуматься
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.