Как сохранить случайное значение начального значения 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"]] 
Другие вопросы по тегам