А мне наоборот, очевидно, что массив должен вести себя так же как хэш. И вернуть nil при запросе к элементу, не входящему в список ключей.:)
Но это, согласитесь вкусовщина.
Зато есть оператор <=>, который возвращает -1,0 или 1, в зависимости от. И он заметно упрощает восприятие кода в подобных случаях. Плюс — меньше разадресации массива, то есть более быстрый код.
[][-1] как раз вернёт nil и не является проблемой.
За алгоритм через цикл — одновременно респект (так как не требует погружения в стек, мой рекурсивный подход правильно в этом упрекнули) и дизреспект, так как это менее идиоматично.
И да, >> find([],5)
NoMethodError: undefined method `<' for nil:NilClass
Да, писать на Руби имеет смысл именно чтобы алгоритм в коде читался.
Понятно, что секунда для 10000 поисков в 10000 — это не серьёзно, если речь про большие числа и большие скорости.
Зато писать приятно и быстро. И даже кому-то ещё потом за тобой это переписывать.
Выдалось ещё 7 минут — вылизал. pastie.org/928137
Добавил весьма обнадёживающий бенчмарк: user system total real
Built-in Array::index 6.950000 0.020000 6.970000 ( 7.735154)
My own binary search 0.900000 0.030000 0.930000 ( 1.195101)
Другие сенсационные новости, оттуда же:
Из глаз 30 москвичей извлечен пепел вулкана
Анастасию Стоцкую допросили в ГУВД
Русская подруга Мела Гибсона сбежала в Москву
Водитель-идиот таранит толпу
Врач-стоматолог задержан за развращение детей
Сбитый велосипедист покалечил пенсионера
Звезды теряют тысячи долларов из-за вулкана
g.raphaeljs.com/
Что-то типа
И Ruby с AS3 слились.
Но это, согласитесь вкусовщина.
Зато есть оператор <=>, который возвращает -1,0 или 1, в зависимости от. И он заметно упрощает восприятие кода в подобных случаях. Плюс — меньше разадресации массива, то есть более быстрый код.
За алгоритм через цикл — одновременно респект (так как не требует погружения в стек, мой рекурсивный подход правильно в этом упрекнули) и дизреспект, так как это менее идиоматично.
И да,
>> find([],5)
NoMethodError: undefined method `<' for nil:NilClass
Да, писать на Руби имеет смысл именно чтобы алгоритм в коде читался.
Понятно, что секунда для 10000 поисков в 10000 — это не серьёзно, если речь про большие числа и большие скорости.
Зато писать приятно и быстро. И даже кому-то ещё потом за тобой это переписывать.
Но встроенного бинарного нету, насколько я знаю.
Понятно, что существует NArray и всякие другие полезные либы.
pastie.org/928137
Добавил весьма обнадёживающий бенчмарк:
user system total real
Built-in Array::index 6.950000 0.020000 6.970000 ( 7.735154)
My own binary search 0.900000 0.030000 0.930000 ( 1.195101)
arr = [1,2,3,4,5]
(arr+[7]).each{|z| p bis(arr,z)}
должен быть вложен в
begin
end if (__FILE__ == $0)
Забыл про собственные сниппеты.
Тоже связи никакой, но новость животрепещущая. Хотя никто никого не убил, конечно.
pastie.org/927639
pastie.org/927639
Правда, не совсем без тестов — две строки внизу меня хоть успокоили…
Дальше можно вылизывать
Лайфньюс одни такие.
Остальное там — перепечатки лайфньюсовской новости.
А в Комсомолке — ещё до кучи ссылка на неcуществующую статью РИАНовости. И это не просто битая ссылка, такой новости совсем нет: www.google.ru/search?hl=ru&newwindow=1&q=Ярослав+Мельниченко+site:rian.ru
Переставайте верить всему, что на заборах пишут, короче.
LifeNews — минус один в карму:)
Другие сенсационные новости, оттуда же:
Из глаз 30 москвичей извлечен пепел вулкана
Анастасию Стоцкую допросили в ГУВД
Русская подруга Мела Гибсона сбежала в Москву
Водитель-идиот таранит толпу
Врач-стоматолог задержан за развращение детей
Сбитый велосипедист покалечил пенсионера
Звезды теряют тысячи долларов из-за вулкана