Функция сортировки на Haskell - PullRequest
4 голосов
/ 27 января 2010

Почему в Haskell sort из Data.List игнорируется третья цифра?

Prelude>sort ["1","200","234","30"]

["1","200","234","30"]

РЕДАКТИРОВАТЬ: Извините, я не понял, что это были строки. Моя вина.

Ответы [ 4 ]

26 голосов
/ 27 января 2010

Нет, но он сортирует строки так, как и должен:чтобы отсортировать по числовому значению, вам нужно отсортировать действительные числа.

import Data.List
import Data.Function

sortNumeric = sortBy (compare `on` (read :: String -> Int))

sortNumeric ["1", "200", "234", "30"]

Но: почему ваш список, полный "цифр", содержит строки?Попробуйте вместо этого использовать правильный [Int].

8 голосов
/ 27 января 2010

Я не эксперт по Haskell, но, похоже, он выполняет лексическую сортировку строк. Можете ли вы сделать их целыми числами вместо этого? (Может что-то типа [1, 200, 234, 30]?)

2 голосов
/ 27 января 2010

Вы сортируете строки, а не числа - это упорядочивает их «по алфавиту», поэтому сортирует по первому символу, затем по следующему и так далее. По этой же причине вы часто будете видеть файлы с именами, такими как «Файл 1», «Файл 2», ... «Файл 10», и отсортированными «неправильно».

2 голосов
/ 27 января 2010

Вы используете строки, а не цифры. Вы должны рассмотреть разбор строк на числа. Попробуйте удалить символы "" и посмотрите, начнет ли он работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...