Поскольку sortBy
является , определенным как стабильный , вы можете сортировать несколько раз, используя вторичный ключ (ключи) в обратном порядке:
myList |> Seq.sortBy (fun x -> x.SomethingElse) |> Seq.SortBy (fun x -> x.Something)
Элементы, которые сравнивают то же самое для первичного ключа, сохранят предыдущее упорядочение, выполненное вторичным ключом. Элементы, которые сравниваются одинаково для обеих клавиш, будут в исходном порядке. Это имеет преимущество (в отличие от метода кортежей), заключающееся в том, что вы можете контролировать, будет ли сортировка по убыванию для каждого из ключей независимо.
Если ваши ключи сортировки имеют целые числа со знаком, и вы хотите отсортировать, скажем, вторичный ключ в порядке убывания, вы все равно можете использовать метод кортежа, используя отрицание:
myList |> Seq.sortBy (fun x -> x.Something, -x.SomethingElse)
Этот метод, возможно, менее понятен, но может быть быстрее, чем сортировка в два раза. Помните, что из-за переполнения оно неправильно обрабатывает наименьшее значение.