А как вообще в динамическом языке правильно сортировать массив? Проходить по всему массиву и считать чего там больше - строк, чисел, или каких-нибудь объектов с compareTo()?
Есть два способа: 1. пихать CompareTo() в объекты. Это плохо, т.к. не все типы можно и нужно сравнивать, сложно поменять функцию сравнения на лету, два объекта разных типов могут по-разному сравниваться друг с другом 2. передача функции или объекта для сравнения явно. Это лучше, т.к. по коду все видно, нет проблем с разным сравнением разных объектов в рамках одной сортировки, функции сравнения хорошо комбинируются: легко из ASC сделать DESC, легко отсортировать по двум полям в один проход. Из минусов только то, что хреново работает без лямбд.
В JS - второй, более правильный подход. Претензия в том, что используется сравнение строк по умолчанию. Ну да, у JS половина косяков от того, что хотели сделать попроще, а вышло боком.
Comments 27
Reply
Так делают и ruby и python
Reply
1. пихать CompareTo() в объекты. Это плохо, т.к. не все типы можно и нужно сравнивать, сложно поменять функцию сравнения на лету, два объекта разных типов могут по-разному сравниваться друг с другом
2. передача функции или объекта для сравнения явно. Это лучше, т.к. по коду все видно, нет проблем с разным сравнением разных объектов в рамках одной сортировки, функции сравнения хорошо комбинируются: легко из ASC сделать DESC, легко отсортировать по двум полям в один проход. Из минусов только то, что хреново работает без лямбд.
В JS - второй, более правильный подход. Претензия в том, что используется сравнение строк по умолчанию. Ну да, у JS половина косяков от того, что хотели сделать попроще, а вышло боком.
Reply
Чего сложного-то? Так же передаешь в sort свою реализацию
>> В JS - второй, более правильный подход
Ты забыл имхо написать.
В python и ruby сортировки гомогенных списков любых типов отработают на ура,
именно так как ожидает программист.
Не-гомогенные списки на практике встречаются ну очень редко.
Reply
```
Definition and Usage
The sort() method sorts the items of an array.
The sort order can be either alphabetic or numeric, and either ascending or descending.
Default sort order is alphabetic and ascending.```
Reply
(The comment has been removed)
Reply
(The comment has been removed)
( ... )
Reply
Reply
Reply
А светозарный v8 как выясняется считает быстро, но херню какую-то
Reply
Leave a comment