2017-08-21 5 views
0

J'essaie d'inviter un utilisateur pour les noms complets, puis crypter les.Comment parcourir deux tableaux et imprimer l'entrée de l'utilisateur?

J'ai une boucle qui continuera à demander à l'utilisateur des noms jusqu'à ce qu'ils tapent 'quit'. Sur 'quit', j'ai besoin d'imprimer des phrases contenant à la fois le real_name et le encrypt_name pour chaque nom.

Je dispose d'un tableau sur lequel appuyer le nom de l'utilisateur. Un exemple avec trois noms:

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

Je suppose que je devrais pousser ensuite les noms chiffrés à un tableau distinct. Un tableau d'exemple de ces trois noms après le chiffrement:

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

Je dois imprimer cette déclaration pour chaque nom:

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

Comment parcourir les tableaux et imprimer les données dans cette déclaration pour chaque prénom? Y a-t-il une manière différente/meilleure d'accomplir ceci?

+1

Switching noms et prénoms et décalage d'une lettre ne se qualifie peut-être pas vraiment que le cryptage autant que obscurcissement ;-) –

Répondre

2

Deux méthodes de base:

a) Faire de chaque personne une classe, en gardant toutes les données en un seul endroit, de sorte que vous pouvez avoir un seul tableau:

a1) En utilisant la classe appropriée:

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) La classe est si simple, nous pouvons le définir en utilisant Struct:

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

a3) Si vous ne pouvez pas être dérangé, vous pouvez simplement utiliser un mini-tableau [full_name, encrypt_name], ou un hachage { full_name: full_name, encrypt_name: encrypt_name }, mais ceux-ci ne sont pas aussi lisibles.

b) Si vous voulez vraiment itérer deux tableaux, utilisez 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