Сортировка по значению в объекте в массиве в Ruby - PullRequest
4 голосов
/ 19 апреля 2011

У меня есть куча объектов в массиве, и я хотел бы отсортировать по значению, которое имеет каждый объект.Рассматриваемый атрибут в каждом объекте является числовым значением.

Например:

[[1, ..bunch of other stuff],[5, ""],[12, ""],[3, ""],]

станет:

[[1, ..bunch of other stuff],[3, ""],[5, ""],[12, ""],]

Я хочу отсортировать по числовому значениюхранится в каждом из объектов.

[5, 3, 4, 1, 2] становится [1, 2, 3, 4, 5], однако эти числа хранятся внутри объектов.

Ответы [ 4 ]

9 голосов
/ 19 апреля 2011

Другие ответы хорошие, но не минимальные.Как насчет этого?

lst.sort_by &:first
3 голосов
/ 19 апреля 2011

Метод sort может использовать блок для сравнения элементов:

lst = [[1, 'foo'], [4, 'bar'], [2, 'qux']]
=> [[1, "foo"], [4, "bar"], [2, "qux"]]
srtd = lst.sort {|x,y| x[0] <=> y[0] }
=> [[1, "foo"], [2, "qux"], [4, "fbar"]]
1 голос
/ 19 апреля 2011

При сортировке объектов и сложных конструкций используйте sort_by.Sort_by выполняет « Шварцевское преобразование », которое может существенно повлиять на скорость сортировки.

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

1 голос
/ 19 апреля 2011

Предполагая, что вы хотите отсортировать только по первому элементу,

[[1, ..bunch of other stuff],[5, ""],[12, ""],[3, ""],].
sort_by{|n, *args| n}

или

[[1, ..bunch of other stuff],[5, ""],[12, ""],[3, ""],].
sort_by{|n, args| n}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...