Как мне случайным образом вернуть элемент из массива в Ruby

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

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

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

Я попытался использовать команду .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

случайный_случай()

Я ожидаю, что на выходе будет ДЖОН, или Джон, или Джейн, или ДЖЕЙМС, или ДЖЕЙН, или Джеймс - случайным образом

Ваши первые два предложения противоречивы. Как вы можете выбрать одно имя и вернуть объект (это строка?), который ссылается на все имена? Вы говорите: «...тогда отображайте либо прописными, либо строчными буквами». Ну, что это?

Cary Swoveland 05.07.2019 19:25
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
1
255
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Попробуй это

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

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

 puts random_case names

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

Спасибо за помощь. Пожалуйста, смотрите следующий вопрос, и ваша помощь очень нужна -` stackoverflow.com/q/56864526/6651760

Christopher Ezimoha 03.07.2019 08:58

Привет @ChristopherEzimoha, приятно знать, что это помогает. Не могли бы вы сначала пометить это как решение, а затем переформатировать свой код в новом вопросе, чтобы другие могли его лучше видеть.

quyetdc 03.07.2019 09:02

Пожалуйста, не просите ОП выбрать ваш ответ, это неприлично. Если бы ОП был ветераном SO, они бы просто проигнорировали запрос; этот ОП, явно новичок в SO, может не осознавать, что нет необходимости спешить с выбором ответа, что большинство участников ждут, по крайней мере, пару часов, прежде чем сделать это. Кристофер, вызывая каждый метод для каждого имени, а затем случайным образом выбирая один массив, как правило, является плохой практикой, лучше выбирать одно имя случайным образом, а затем вызывать каждый метод для этого имени.

Cary Swoveland 05.07.2019 19:16

Я бы начал с:

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"

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

 names= ["James", "John", "Jane"]
 random = [names.sample.upcase, names.sample.downcase].sample
 puts "Hello #{random}! How are you today?"

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

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

# 3?, # 2?, ?, потому что в большинстве случаев это не очень хорошая идея, и ОП может быть впечатлительным.

Cary Swoveland 05.07.2019 19:38

Другие вопросы по теме