Как сохранить случайное значение начального значения sort_by {rand} в списке в ruby?
Я новичок в рубине. Я хотел сохранить массив в значение, которое rand
оценивает (скажем, 0.78346....) число со следующими строками.
rows = ["hello", "nihao", "konnichiwa", "hallo"]
myrand = Random.new(100) # seed - 100
rows.sort_by!{myrand.rand } => result could be - ["nihao ", "hello", "konnichiwa", "hallo"]
Например: [[0.12232, "nihao"],[0.53434, "hello"],[0.333, "konnichiwa"],[0.99, "hallo"]]
Как я могу получить этот массив из rows.sort_by!{myrand.rand }
?
1 ответ
Решение
Сначала вам нужно сохранить случайные числа в массиве:
rows = ["hello", "nihao", "konnichiwa", "hallo"]
myrand = Random.new(100) # seed - 100
rows.map { |x| [myrand.rand, x] }.sort!
=> [[0.27836938509379616, "nihao"], [0.4245175907491331, "konnichiwa"], [0.5434049417909654, "hello"], [0.8447761323199037, "hallo"]]
Показанный выше результат всегда должен быть одинаковым, хотя это Random
Так как семя известно - для Random.new(100)
это всегда будут первые четыре сгенерированных числа.
Технически вы можете сделать именно то, что вы просите, выполнив:
rows = ["hello", "nihao", "konnichiwa", "hallo"]
myrand = Random.new(100) # seed - 100
rows = rows.map { |x| [myrand.rand, x] }
=> [[0.5434049417909654, "hello"], [0.27836938509379616, "nihao"], [0.4245175907491331, "konnichiwa"], [0.8447761323199037, "hallo"]]
myrand = Random.new(100) # resetting back to seed - 100
rows.sort_by!{ myrand.rand }
=> [[0.27836938509379616, "nihao"], [0.4245175907491331, "konnichiwa"], [0.5434049417909654, "hello"], [0.8447761323199037, "hallo"]]