Ruby кратчайший способ записи rnd hex - PullRequest
2 голосов
/ 27 декабря 2010

У меня есть метод, используемый для генерации случайных шестнадцатеричных значений.Например, 666 или FF7

Однако я не думаю, что это выглядит просто / элегантно вообще. Я хочу сделать его более простым , что, возможно, сделает мойКод тоже короче, но я не знаю как.Вот почему мне нужны советы или подсказки

Вот мой код:

def random_values
random_values = Array.new
letters = ['A','B','C','D','E','F']
for i in 1..15
  if i <= 9
    random_values << i
  else
    random_values << letters[i-10]
  end
end  
return random_values.shuffle[0].to_s + random_values.shuffle[0].to_s + random_values.shuffle[0].to_s
end

Как вы, вероятно, видите, я не генерирую случайные числа.Я просто перетасовываю массив, содержащий нужные значения, то есть все числа в массиве уникальны, что не нужно, но было самым простым решением для меня, когда я писал код.

Меня больше всего беспокоит обратная строка .. Если бы можно было написать так:

return 3.times { random_values.shuffle[0] }

или

return random_values.shuffle[0].to_s *3

Заранее спасибо!

Ответы [ 3 ]

5 голосов
/ 27 декабря 2010
def random_value
     r = Random.new
     ((r.rand * 16)).to_i.to_s(16)
end

puts random_value + random_value + random_value

Или, после небольшого исследования:

"%06x" % (rand * 0xffffff)

С Рубин, Генерировать случайный гекс цвет

Кроме того, вам не следует искать более эффективное решение как таковое. Вы, кажется, ищете что-то более элегантное, простое и интуитивно понятное. (Мое решение, кстати, ни одно из них. Обыскиваемое.)

3 голосов
/ 27 декабря 2010
# For Ruby 1.9
require 'securerandom'
SecureRandom.hex(16)

# For Ruby 1.8 and above
require 'active_support/secure_random'
ActiveSupport::SecureRandom.hex(16)
1 голос
/ 27 декабря 2010

Как-то так?

(rand * MAX_VALUE).to_i.to_s(16)

Где MAX_VALUE - верхняя граница для чисел.Вы также можете добавить некоторую нижнюю границу:

(MIN_VALUE + rand * (MAX_VALUE - MIN_VALUE)).to_i.to_s(16)

Это даст вам числа в диапазоне [MIN_VALUE, MAX_VALUE)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...