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

    +129

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    private List<Ball> _balls;
    private Interaction GetInteraction(Ball ball) {
      foreach (var b2 in _balls.SkipWhile(b => b != ball).Skip(1)) {
          /* ... */
      }
    }
    
    var table = _balls.Select(GetInteraction);

    Откопал в своей проге.
    нужно было определить, какой шарик с кем взаимодействует раньше всего, притом если уже рассчитано взаимодействие 1 и 2 шарика (при рассчёте взаимодействий 1 и 2, 1 и 3, 1 и 4, ... и выделено самое раннее взяимодействие шарика 1), то взимодействие 2 и 1 рассчитываеть не надо. Таким образом, нужно было пройти все пары шариков так, чтоб первый встретился в списке раньше второго.
    Массивы, индексы и циклы? Не, не знаем такого. Только Select, только ФП, только колдовство со SkipWhile(b => b!=ball).Skip(1).

    Запостил: Jean-Esther, 01 Октября 2013

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

    • Чего-то в коде не хватает для полной картины, в данном примере GetInteraction вообще не вызовится, тк вы передаете сам метод, а так же ещё заметно что не все скопировали, тк нет return в конце метода
      Ответить
      • return находится внутри foreach, я не счёл нужным приводить лапшу из if-else.
        Ответить
        • Шарп не позволит скомпилировать такой код без return (или throw) в конце, поскольку возможно что тело foreach не выполнится ни разу.
          Ответить
          • не нужно мне мозги давить. у меня компилируется. могу полный код привести. только, имхо, это совешенно неоправданно, там ничего особо говнокодистого нет. и да, там есть финальный return.
            Ответить
            • > return находится внутри foreach
              > там есть финальный return
              Путаемся в показаниях? :)

              Вот return после foreach есть, потому и компилируется. Или в шарпе та же срань, что и в сишке\крестах: пропущенный return всего лишь ворнинг?
              Ответить
      • Как раз-таки вызовется, поскольку Select принимает делегат и применяет его к каждому элементу массива (правда по мере обращений к результату).
        Ответить
    • И какая муха его укусила? Может, с работы попёрли? Я бы тогда тоже на всех кидался.
      Ответить

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