Каждый узел в Cassandra должен связываться с отдельным IP-адресом, даже на физических серверах или докерах, на которых работают 2 экземпляра / узла.
Простое решение -
basket.sort_by { |f| [-f.calories, f.name] }
Конечно, если это канонический порядок сортировки фруктов, то он должен быть определен с помощью ] <=>
и с модулем Comparable
, смешанным в Fruit
Предположим, ваша корзина является массивом или его подклассом. .
Как указал Гарет , Enumerable (включенный в Array) имеет метод sort_by, который проходит через каждый элемент списка один раз. Это быстрее запускается и быстрее писать, как только вы освоите его.
# -f.calories to sort descending
# name.downcase to do a case-insensitive sort
basket = basket.sort_by { |f| [-f.calories, f.name.downcase] }
Исходя из опыта работы с Perl, мой первый импульс - воспользоваться оператором космического корабля <=> , Нахальный маленький дьяволенок. Массив имеет сортировку и сортировку! методы, которые делают его очень полезным. Это решение работает медленнее, и, поскольку оно длиннее, вероятность появления ошибок выше. Единственная причина использовать его - если вы имеете дело с людьми, незнакомыми с Ruby и не желающими найти правильный способ в StackOverflow.
baseket.sort! { |a,b|
if a.calories == b.calories
a.name.downcase <=> b.name.downcase
else
# Reverse the result to sort highest first.
-(a.calories <=> b.calories)
end
}
См. Array # sort
( Документ API ). Вы можете передать блок, который возвращает -1, 0 или 1 для двух объектов Fruit
, и ваш блок может определять эти значения, используя любые атрибуты, которые вам нравятся.
Если вам нужно много сортировать фрукты, вам, вероятно, следует проделать немного больше работы и сделать ваши объекты сопоставимыми.
Для этого вам необходимо внедрить Spaceship-Operator ( <=>
) и включить Comparable.
class Fruit
attr_accessor :name, :color
def <=>(other)
# use Array#<=> to compare the attributes
[self.name.downcase, self.color] <=> [other.name.downcase, other.color]
end
include Comparable
end
тогда вы можете просто сделать:
list_of_fruits.sort
Comparable также предоставляет вам множество других методов ( ==
, <
, >
) бесплатно, поэтому вы можете делать такие вещи, как if (apple
<=> указывается для возврата -1
, если self
меньше, чем other
, +1
, если other
меньше и 0
, если оба объекта равны.