Я думаю, что это отличный однострочный Ruby:
someArray.sort_by {rand}
Это краткий, читаемый, и он работает, но я не совсем понимаю, как это сделать. Вот что я знаю:
-
randоценивает число от 0 до 1 (например, 0.783468632804653) -
randнеоднократно оценивается в коде выше, потому что назначение егоxсначала прерывает случайный сортировку -
sort_by {0.783468632804653}или любое другое число, которое я пробовал, не влияет на массив
ruby-doc.org не помог мне в этом случае.
Может кто-нибудь объяснить это шаг за шагом?
Update
Я использую Ruby дольше, и я вижу, что мне не хватало концепции или двух здесь. Главное, что:
-
rand- метод (определенный на ядре); он генерирует случайное число -
{rand}- это блок, которыйsort_byсохраняет, называя его каждый раз, он хочет сравнить два элемента в коллекции. Если коллекция представляет собой группу объектов, представляющих страны, она должна иметь возможность захватить два из них и определить, какой из них будет первым. Вы сначала ставите имя с самым длинным именем? Тот, у кого самая большая масса суши? Блок должен ответить на этот вопрос, вернув значение, которое говорит "вы спросили об Испании против Камеруна, и я говорю, что Камерун на первом месте". (Вы можете сделать это с помощью{|country| country.name.length}
Остальная часть работы sort_by объясняется в документации. Я все еще не совсем уверен, почему возвращение случайного числа работает вообще - предположительно sort_by округляет его до -1, 0 или 1, в зависимости от того, что ближе? Но в любом случае получение различного случайного числа каждый раз, когда вы вызываете блок, сильно отличается от получения того же числа каждый раз. Когда sort_by говорит, "какая из этих двух стран на первом месте?", {rand} ставит повязку, поворачивается примерно в 10 раз, указывает и говорит "тот!".:)