Исходя из вашего примера, похоже, что вы хотите использовать несколько ключей сортировки, и некоторые из них должны быть в порядке возрастания, а другие - в порядке убывания.Я думаю, что это сценарий, на который не ответил ни один из других вопросов.
В общем, вы можете использовать несколько ключей сортировки в F # с помощью кортежей.F # имеет функции List.sortBy
и List.sortByDescending
, которые дают вам два возможных порядка:
data |> Seq.sortByDescending (fun x -> x.FirstKey, x.SecondKey)
Однако, таким образом, порядок сортировки для обоих ключей будет одинаковым.Нет простого способа использовать один ключ в одном порядке, а другой ключ - в другом.Во многих случаях вы можете просто использовать числовой минус и сделать что-то вроде:
data |> Seq.sortByDescending (fun x -> x.FirstKey, -x.SecondKey)
Это не является полностью пуленепробиваемым из-за значений MaxInt
, но, вероятно, это будет часто работать.В выражениях запросов F # (которые вдохновлены тем, как работает LINQ), вы можете использовать несколько ключей сортировки, используя sortBy
и thenBy
(или sortByDescending
и thenByDescending
):
query {
for x in data do
sortByDescending x.FirstKey
thenBy x.SecondKey }
Здесь,первый ключ будет использоваться для сортировки по убыванию, и, когда имеется несколько элементов с одинаковым FirstKey
, второй ключ будет использоваться для сортировки по возрастанию в этой группе.Я подозреваю, что это, вероятно, то, что вам нужно в общем случае - но, к сожалению, нет хорошего способа написать это с помощью синтаксиса конвейера.