1. C# / Говнокод #13451

    +124

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    class Comparer : IComparer<int>
    {
        Random random = new Random();
    
        public int Compare(int x, int y)
        {
            return 1 - random.Next() % 3;
        }
    }

    Запостил: Ccik, 18 Июля 2013

    Комментарии (21) RSS

    • Сортировкам крышу сорвет :)

      А в шарпе разве нету random.Next(3) вместо забагованного random.Next() % 3?
      Ответить
      • Есть, но это не концептуально :)
        Ответить
        • Кстати, самая тема поюзать этот компаратор для какого-нибудь словаря. Иногда он даже будет что-нибудь находить. Но очень редко.
          Ответить
          • class Comparer<T> : IComparer<T>, IEqualityComparer<T>
            {
                Random random = new Random();
            
                public int Compare(T x, T y)
                {
                    return 1 - random.Next() % 3;
                }
            
                public bool Equals(T x, T y)
                {
                    return Compare(x, y) == 0;
                }
            
                public int GetHashCode(T obj)
                {
                    return random.Next();
                }
            }
            Ответить
            • class Comparer<T> : IComparer<T>, IEqualityComparer<T>
              {
                  public int Compare(T x, T y) {
                      return 1;
                  }
                  public bool Equals(T x, T y) {
                      return false;
                  }
                  public int GetHashCode(T obj) {
                      return 4; // choosen by fair dice roll. guaranteed to be random
                  }
              }
              Ответить
              • Этот вариант мне нравится больше. У него больше перфоманс и больше шансов, что конпелятор всё заинлайнит.
                Ответить
      • А в Шарпе не кинет как в моей любимой джаве-7 Exception при сортировке?
        Ответить
        • Может быть и кинет, если до него дойдет, что a<b и a>b одновременно.
          Ответить
          • В джаве-то сразу:

            Comparison method violates its general contract!
            Ответить
            • Ну, можно это зафиксить, если сохранять результат сравнения в хеш.
              Ответить
              • И как поможет одновременное сохранение инфы о том, что А > B и B > A?
                Ответить
                • Ну естественно с учетом того, что операнды могут стоять в разном порядке.
                  Ответить
                • Если мы захешируем факт, что 5<6, и при последующих сравнениях 5<6 и 6>=5 будем возвращать такой же результат, то никто ничего не заметит ;)
                  Ответить
          • Шарп проверяет исполнение аксиом в дебаге при использовании компарера в ассоциативных коллекциях.
            Ответить
      • Есть, но для плебеев)
        Похоже чувак решил получишь с помощью сортировки равномерное распределение)
        Ответить
    • Оно не взлетит с вероятностью 2/3 - при сортировке рантайм проверит, что элемент равен сам себе.
      Ответить
    • я думал, деревья - прошлый век =(
      Ответить
      • Хешмапы неупорядочены. Поэтому не всегда можно использовать их вместо дерева.
        Ответить
      • > деревья - прошлый век
        Скажите это файловым системам, хранилищам вроде Cassandra/LevelDB и индексаторам.
        Ответить
    • .
      Ответить

    Добавить комментарий