Как случайным образом вернуть элемент из массива в Ruby - PullRequest
0 голосов
/ 01 июля 2019

Я хочу выбрать имя случайным образом из списка массивов, а затем отобразить его заглавными или строчными буквами

Например names = ["Джеймс", "Джон", "Джейн"] Вывод должен быть: ДЖОН или Джон или Джейн или ДЖЕЙМС или ДЖЕЙН или Джеймс

Пожалуйста, помогите!

Я пытался использовать команду .sample (), которая выбирает из массива. Кроме того, я знаю о .upcase () и .lowercase (), теперь проблема состоит в том, как объединить все эти методы вместе, чтобы получить желаемый результат, состоящий в том, чтобы случайным образом выбрать имя для списка массивов и затем отобразить в прописные или строчные.

 def random_case(*names)
  names= ["James", "John", "Jane"]
  names.sample { |names| names.upcase  names.downcase }
  puts "Hello #{names}! How are you today?"
 end

random_case ()

Я ожидаю, что на выходе получится Джон, Джон, Джейн, Джеймс, Джейн, Джеймс - случайно

Ответы [ 4 ]

2 голосов
/ 01 июля 2019

Я бы написал два метода. Один для возврата случайного имени из списка имен:

def random_name(*names)
  names.sample
end

и еще один для изменения регистра данного имени: (rand < 0.5 имеет 50% шанс быть true)

def random_case(name)
  if rand < 0.5
    name.upcase
  else
    name.downcase
  end
end

Затем объедините оба:

5.times do
  puts random_case(random_name("James", "John", "Jane"))
end

Выход:

JOHN
JOHN
jane
JAMES
james

Если вам не нравится подход rand < 0.5, вы также можете поместить оба варианта в массив и выбрать один случайным образом:

def random_case(name)
  [name.upcase, name.downcase].sample
end

Или вы можете поместить имена методов :upcase и :downcase в массив, выбрать одно из них случайным образом и использовать public_send для вызова этого метода:

def random_case(name)
  name.public_send([:upcase, :downcase].sample)
end
2 голосов
/ 01 июля 2019

Я бы начал с:

def random_case(*names)
  name = names.sample                                # pick a random name
  [true, false].sample ? name.upcase : name.downcase # return name with random format
end

random_case("James", "John", "Jane")    
#=> "JAMES"
random_case("James", "John", "Jane")
#=> "john"
0 голосов
/ 01 июля 2019

Вы можете сделать это так.

 names= ["James", "John", "Jane"]
 random = [names.sample.upcase, names.sample.downcase].sample
 puts "Hello #{random}! How are you today?"
0 голосов
/ 01 июля 2019

Попробуйте это

 def random_case(names)  
   names.flat_map{|name| [name.upcase, name.downcase, name.capitalize]}.sample
 end

 names= ["James", "John", "Jane"]

 puts random_case names

Я думаю, что код довольно прост для понимания.Есть проблемы?оставьте комментарий, чтобы сообщить мне

...