Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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/2/ssis/2.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中,什么是可以生成8个字符的随机字符串的优雅行?_Ruby - Fatal编程技术网

在Ruby中,什么是可以生成8个字符的随机字符串的优雅行?

在Ruby中,什么是可以生成8个字符的随机字符串的优雅行?,ruby,Ruby,Rails教程中有一行: ('a'..'z').to_a.shuffle[0..7].join 它可以生成“zwnrfxte”,但不再使用相同的字符。什么是优雅的线条,它可以?一个可以同时使用a..z和a..z?字母=('a'..'z')。到a+('a'..'z')。到a a = ('a'..'z').to_a + ('A'..'Z').to_a 0.upto(7).map{|x| a[ rand( a.size ) ] } rand|u string=(0..7).injection(“

Rails教程中有一行:

('a'..'z').to_a.shuffle[0..7].join
它可以生成
“zwnrfxte”
,但不再使用相同的字符。什么是优雅的线条,它可以?一个可以同时使用a..z和a..z?

字母=('a'..'z')。到a+('a'..'z')。到a
a = ('a'..'z').to_a + ('A'..'Z').to_a 
0.upto(7).map{|x| a[ rand( a.size ) ] }

rand|u string=(0..7).injection(“”{| s | s只是为了好玩,这里还有一些:

8.times.map {(rand(26) + (rand > 0.5 ? 65 : 97)).chr}.join
 => "JnFHpIqb"

8.times.map {((r = rand(26)) > 13 ? r + 65 : r + 97).chr}.join
 => "PQYciXcg"
这两种方法都可用于注入:

8.times.inject("") {|s| s += (rand(26) + (rand > 0.5 ? 65 : 97)).chr}
 => "WFkVqgeG"

8.times.inject("") {|s| s += ((r = rand(26)) > 13 ? r + 65 : r+ 97).chr}
 => "faQnScmd"

在1.9中,这可以以非常干净的方式完成:

>> 8.times.map { [*?a..?z,*?A..?Z].sample }.join #=> "kmQQvuPd"
字符将重复,如本例中较小字符范围所示:

>> 8.times.map { [*?a..?c,*?A..?C].sample }.join #=> "CaACAaBa"
不过,您可能希望将字母数组存储在单独的变量中:

>> letters = [*?a..?z,*?A..?Z] #=> ["A", "B", "C", ...]
>> 8.times.map { letters.sample }.join #=> "HBKKbnzx"
加密安全随机性的混合熵
(至少对于Linux/Unix/Mac。)

或作为一个单行程序(0..7)。将{('a'..'z')映射到_a.concat('a'..'z')。映射到_a.sample}。join@mike..inject块中有2个参数,对吗?u只给出了1。1行程序给出了9个字符,因为
是包含在内的。@rubyprince,是的,这是有意的。我想使用inject/reduce作为它的“reduce to a string”这样我就不必使用jointhis
8.times.map{a[rand(a.size)]}.join
也很好…在Ruby 1.9.2中尝试过这不是一个1行程序…只需说:p只是替换
('a''z')。用
('a''z')替换a
。到a+('a''z')。到a
将是最简单的解决方案。字符需要能够重复
>> 8.times.map { [*?a..?c,*?A..?C].sample }.join #=> "CaACAaBa"
>> letters = [*?a..?z,*?A..?Z] #=> ["A", "B", "C", ...]
>> 8.times.map { letters.sample }.join #=> "HBKKbnzx"
File.open('/dev/random', 'r') { |f| f.sysread(8).tr "\0-\377", "a-zA-Z"*5 }