我试图提示用户输入全名,然后加密它们。
我有一个循环,在他们输入'quit'
之前会继续询问用户名字。在'quit'
后,我需要为每个名称打印包含real_name
和encrypt_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}"
如何遍历数组并在此语句中为每个名称打印数据?是否有不同/更好的方法来实现这一目标?
答案 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