如何迭代两个数组并打印用户输入?

时间:2017-08-21 01:10:03

标签: arrays ruby loops iteration

我试图提示用户输入全名,然后加密它们。

我有一个循环,在他们输入'quit'之前会继续询问用户名字。在'quit'后,我需要为每个名称打印包含real_nameencrypt_name的句子。

我有一个数组可以将用户的名字推送到。一个有三个名字的例子:

full_name = ["Fred Fredrickson", "Bobby June", "Jack Daniel"]

我假设我应该将加密的名称推送到单独的数组中。加密后这三个名称的示例数组:

encrypt_name = ["Gsifsodltup Gsif", "Kapi Cuccz", "Fepoim Kedl"]

我需要为每个名字打印此声明:

puts "The spy #{full_name} now has an encrypted name of #{encrypt_name}"

如何遍历数组并在此语句中为每个名称打印数据?是否有不同/更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:2)

两种基本方法:

a)让每个人都成为一个班级,将所有数据保存在一个地方,这样你就可以只有一个数组:

a1)使用适当的班级:

class Person
  attr_reader :full_name, encrypt_name

  def initialize(full_name, encrypt_name)
    self.full_name = full_name
    self.encrypt_name = encrypt_name
  end
end

people = []
loop do
  full_name = gets.chomp
  break if full_name == "quit"
  people << Person.new(full_name, encrypt(full_name))
end
people.each do |person|
  puts "The spy #{person.full_name} now has an encrypted name of #{person.encrypt_name}"
end

a2)该类非常简单,我们可以使用Struct来定义它:

Person = Struct.new(:full_name, :encrypt_name)

a3)如果你不能打扰,你可以使用迷你阵列[full_name, encrypt_name]或哈希{ full_name: full_name, encrypt_name: encrypt_name },但那些不是那么可读。

b)如果你真的想要迭代两个数组,请使用Array#zip

full_names.zip(encrypt_names).each do |full_name, encrypt_name|
  puts "The spy #{full_name} now has an encrypted name of #{encrypt_name}"
end