我如何从 Ruby 中的数组中随机 return 一个元素

How do I randomly return an element from an array in Ruby

我想 select 从数组列表中随机取一个名字,然后以大写或小写形式显示

例如姓名= ["James", "John", "Jane"] 输出应为:JOHN 或 john 或 jane 或 JAMES 或 JANE 或 james

请帮忙!

我试过使用数组中的 selects 的 .sample() 命令。另外,我知道 .upcase() 和 .lowercase(),现在的问题是如何将这些整个方法组合在一起以获得想要的结果,即 select 数组的随机名称然后列表以大写或小写显示。

 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()

我希望输出是 JOHN 或 john 或 jane 或 JAMES 或 JANE 或 james - 随机

试试这个

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

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

 puts random_case names

我认为代码很容易理解。有什么麻烦吗?发表评论让我知道

我会从:

开始
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