Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 调用函数直到(带调用限制)_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 调用函数直到(带调用限制)

Ruby on rails 调用函数直到(带调用限制),ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个生成随机输出(字符串)的函数 我需要调用该函数,直到得到3个不同的输出(字符串) 通过调用函数来生成包含3个唯一字符串的数组的最优雅的方法是什么?如果在指定的尝试次数内未生成输出,则函数可以被调用多少次 以下是我目前拥有的: output = [] limit_calls = 5 limit_calls.times do |i| str = generate_output_function output.push str break if output.uniq.size &

我有一个生成随机输出(字符串)的函数

我需要调用该函数,直到得到3个不同的输出(字符串)

通过调用函数来生成包含3个唯一字符串的数组的最优雅的方法是什么?如果在指定的尝试次数内未生成输出,则函数可以被调用多少次

以下是我目前拥有的:

output = []
limit_calls = 5
limit_calls.times do |i|
  str = generate_output_function
  output.push str
  break if output.uniq.size > 2
end
这个可以被美化/缩短为1行吗?我对ruby很有把握:)

谢谢

使用套装会(稍微)更方便:

require'set'
输出=设置为新
限制通话次数=5次
呼叫计数=0
当output.size<3且call\u count
require'set'
输出=设置为新
限制通话次数=5次
呼叫计数=0
当output.size<3且call\u count输出Froderik的回答遗漏了呼叫限制要求。那么像…这样的函数呢

def unique_string_array(call_limit)
  output = []
  calls = 0
  until (output.size == 3 || calls == call_limit) do
    (output << generate_output_function).uniq! && calls+=1
  end
  output
end
def唯一字符串数组(调用限制)
输出=[]
呼叫数=0
直到(output.size==3 | | calls==call_limit)完成

(输出Froderik的回答忽略了调用限制要求。那么像

def unique_string_array(call_limit)
  output = []
  calls = 0
  until (output.size == 3 || calls == call_limit) do
    (output << generate_output_function).uniq! && calls+=1
  end
  output
end
def唯一字符串数组(调用限制)
输出=[]
呼叫数=0
直到(output.size==3 | | calls==call_limit)完成

(失去limit_调用要求的输出,但您可以通过更改(在第二个示例中)将其恢复到
,而失去limit_调用要求的output.size
,但您可以通过更改(在第二个示例中)将其恢复到原来的状态。)当output.size
5.times.inject([]) { |a, el| a.uniq.size < 3 ? a << generate_output_function : a }
def unique_string_array(call_limit)
  output = []
  calls = 0
  until (output.size == 3 || calls == call_limit) do
    (output << generate_output_function).uniq! && calls+=1
  end
  output
end