【问题标题】:How do I iterate through two arrays and print user input?如何遍历两个数组并打印用户输入?
【发布时间】:2018-01-29 00:03:02
【问题描述】:

我正在尝试提示用户输入全名,然后对其进行加密。

我有一个循环,它将继续询问用户姓名,直到他们输入'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}"

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

【问题讨论】:

  • 切换名字和姓氏并移动一个字母可能不像混淆那样真正符合加密;-)

标签: arrays ruby loops iteration


【解决方案1】:

两种基本方法:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    相关资源
    最近更新 更多