сортировка рубинового массива объектов атрибутом, который мог быть нолем

В MySQLWorkbench вместо File> Run SQL Script вы можете попробовать использовать File> Open SQL Script, а затем Query> Execute (All или Selection)? Таким образом, вы должны увидеть результат каждого запроса скрипта schema.sql.

Вы также можете попробовать использовать команду mysql (из командной строки). Или разделив schema.sql на более мелкие куски, чтобы изолировать проблему.

Если ничего не работает, я предлагаю вам проверить установку MySQL Workbench.

37
задан Chris Drappier 30 April 2009 в 18:12
поделиться

5 ответов

Как насчет того, чтобы Child определял <=> как основанный на category.position if category ] существует, и сортировка элементов без категории всегда выше, чем с категорией ?

class Child
  # Not strictly necessary, but will define other comparisons based on <=>
  include Comparable   
  def <=> other
    return 0 if !category && !other.category
    return 1 if !category
    return -1 if !other.category
    category.position <=> other.category.position
  end
end

Тогда в Parent вы можете просто вызвать children .sort .

15
ответ дан 27 November 2019 в 04:03
поделиться

Я занимаюсь такими вещами, как это:

 children.sort_by {|child| [child.position ? 0 : 1,child.position || 0]}
16
ответ дан 27 November 2019 в 04:03
поделиться

Я бы просто настроил ваш тип так, чтобы последние ноль пунктов были последними. Попробуйте что-то вроде этого.

foo = [nil, -3, 100, 4, 6, nil, 4, nil, 23]

foo.sort { |a,b| a && b ? a <=> b : a ? -1 : 1 }

=> [-3, 4, 4, 6, 23, 100, nil, nil, nil]

Это говорит: если a и b оба не равны нулю, сортируйте их нормально, но если один из них равен nil, возвращайте статус, который сортирует этот один больше.

104
ответ дан 27 November 2019 в 04:03
поделиться

Честно говоря, я не очень знаком с Ruby, поэтому воспринимайте это как идею алгоритма, а не как код ... и перепишите оператор?: Как и все, что есть в Ruby. это чище.

Разве вы не можете просто проверить nil в сравнении:

class Parent
  def sorted_children
     children.sort{|a,b|( a and b ) ? a <=> b : ( a ? -1 : 1 ) }
  end
end

Отредактировано для использования кода Glenra, который реализует то же самое, что и мой, но в меньшем (и, вероятно, легче читаемом) объеме кода.

6
ответ дан 27 November 2019 в 04:03
поделиться

Я давно не делал Ruby, но вы могли бы отделить проверку нуля от сортировки (и просто разрешить позиции Child # возвращать ноль):

def sorted_children
  children.reject{|c| c.position.nil?}.sort_by(&:position) +
    children.select{|c| c.position.nil?}
end

Правда, это не самое эффективное решение, но у него нет магических чисел.

1
ответ дан 27 November 2019 в 04:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: