Étudier à CodeWar (ruby) ④ cas ~ quand

À propos de cet article

Petit à petit, sortie de ce que j'ai appris grâce au Codewar récemment lancé

problème

You probably know the "like" system from Facebook and other pages. People can "like" blog posts, pictures or other items. We want to create the text that should be displayed next to such an item. Implement a function likes :: [String] -> String, which must take in input array, containing the names of people who like an item. It must return the display text as shown in the examples:

Implémentez la méthode likes qui reçoit un tableau comme argument afin qu'il puisse afficher qui l'a aimé à partir des informations contenues dans le tableau.

likes [] -- must be "no one likes this"
likes ["Peter"] -- must be "Peter likes this"
likes ["Jacob", "Alex"] -- must be "Jacob and Alex like this"
likes ["Max", "John", "Mark"] -- must be "Max, John and Mark like this"
likes ["Alex", "Jacob", "Mark", "Max"] -- must be "Alex, Jacob and 2 others like this"

Ma réponse

def likes(names)
  return "no one likes this" if names.empty?
  
  if names.count == 1
    "#{names[0]} likes this"
  elsif names.count == 2
    names.each { |n| }.join(" and ") << " like this"
  elsif names.count == 3
    "#{names[0]}, #{names[1]} and #{names[2]} like this"
  else
   others_count = names.count -2
    "#{names[0]}, #{names[1]} and #{others_count} others like this"   
  end
end

Je pense que c'est un moyen simple de modifier les informations renvoyées en fonction de la longueur du tableau. Je tiens à souligner que j'ai pu écrire une déclaration complète en une ligne pour la première fois de ma vie, telle que return" personne n'aime ça "si names.empty?! !! !! !! !!

meilleur entrainement

Très facile à voir. .. .. Si vous le faites dans plusieurs conditions, case ~ when est plus facile à lire et est meilleur.

def likes(names)
  case names.size
  when 0 
    "no one likes this"
  when 1 
    "#{names[0]} likes this"
  when 2
    "#{names[0]} and #{names[1]} like this"
  when 3
    "#{names[0]}, #{names[1]} and #{names[2]} like this"
  else
    "#{names[0]}, #{names[1]} and #{names.size - 2} others like this"
  end
end

Recommended Posts

Étudier à CodeWar (ruby) ④ cas ~ quand
Étudier à CodeWar (ruby) ⑤ Proc
Étudier à CodeWar (ruby) ②
Étudier à CodeWar (ruby) ⑥ inject
Étudier à CodeWar (ruby) ③ squeeze, gsub
Étudier à CodeWar (ruby) ④ cas ~ quand
Comportement lorsque le caractère générique (**) est spécifié dans ruby
Étudier chez CodeWar
Solution de contournement pour l'erreur Bundler.require lors de l'exécution de ruby avec crontab
Premiers pas avec Ruby
Evolve Eve avec Ruby
Qu'advient-il des variables d'instance lors de la copie d'une instance avec ruby
Un mémo lors du passage de Ruby Silver avec un manuel officiel
Changer de version Ruby avec rbenv
J'ai essayé DI avec Ruby
Client GraphQL commençant par Ruby
Ruby: envoyer des e-mails avec Starttls
Formater Ruby avec VS Code
Comment vérifier les nombres entiers avec ruby
Erreur lors de la lecture avec java
[Ruby] problème avec l'instruction if
Utilisez Ruby avec Google Colab
Premiers pas avec les modules Ruby
[ruby] Appel d'une méthode avec un argument