将字符串值从循环返回到数组(Ruby)

时间:2015-03-25 21:02:56

标签: ruby arrays loops

不确定这是否应该用于我的术语,但我尝试做的是将len个字符数量添加到数组中,然后将其输出到{{1 }}。我让这一代人满意但我不确定如何将字符串打包成阵列。现在,由于.txt语句,它只是将所有字符串吐出到控制台中,只是为了确保它有效。

puts

3 个答案:

答案 0 :(得分:1)

此处您的代码已简化

#Password list generator by Nightc||ed, ©2015
norm = [*"a".."z"]
caps = [*"A".."Z"]
nums = [*0..9]
num, len, type = [
   "How many passwords would you like to generate?",
   "Password length (1-x):",
   "Which characters would you like to use?
    [1] a-z, 0-9
    [2] A-Z, 0-9
    [3] a-z, A-Z, 0-9"].map do |msg|
     puts msg
     gets.to_i
   end

arr = case type
      when 1 then
        norm + nums
      when 2 then
        caps + nums
      when 3 then
        norm + caps + nums
      else
        exit
      end

passwords = num.times.map { arr.sample(len).join }
puts passwords.inspect
sleep

答案 1 :(得分:0)

您可以使用<<方法添加到数组中。例如:

arr = []
3.times do |el|
  arr << el
end
arr.inspect #=> [0, 1, 2]

另一种选择是push方法:

arr = []
(0..2).each { |el| arr.push(el)}

答案 2 :(得分:0)

我认为您可以使用以下内容替换if...及以下内容来简化您的生活:

case type
  when "1"
    arr = [norm,nums].flatten
  when "2"
    arr = [caps,nums].flatten
  when "3"
    arr = [norm,caps,nums].flatten
  else
    exit
end
passwd_set = []
num.times { passwd_set << arr.sample(len).join }
p passwd_set

我发现case语句更容易阅读,更容易扩展。展平数组使得sample可以直接生成所需数量的字符/符号,并且join可以生成一个字符串,可以将其附加到passwd_set数组。< / p>