Studieren bei CodeWar (Ruby) ④ case ~ when

Über diesen Artikel

Nach und nach wird das ausgegeben, was ich durch den kürzlich gestarteten Codewar gelernt habe

Problem

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:

Implementieren Sie die Likes-Methode, die ein Array als Argument empfängt, damit anhand der im Array enthaltenen Informationen angezeigt werden kann, wem es gefallen hat.

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"

Meine Antwort

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

Ich denke, es ist eine einfache Möglichkeit, die zurückgegebenen Informationen abhängig von der Länge des Arrays zu ändern. Ich möchte betonen, dass ich zum ersten Mal in meinem Leben eine einzeilige vollständige if-Anweisung schreiben konnte, wie zum Beispiel "return", niemand mag das ", wenn names.empty?"! !! !! !! !!

beste Übung

Sehr leicht zu sehen. .. .. Wenn Sie dies unter mehreren Bedingungen tun, ist "case ~ when" leichter zu lesen und besser.

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

Studieren bei CodeWar (Ruby) ④ case ~ when
Studieren bei CodeWar (Rubin) ⑤ proc
Studieren bei CodeWar (Rubin) ②
Studieren bei CodeWar (Rubin) ⑥ injizieren
Studieren bei CodeWar (Rubin) ③ Squeeze, gsub
Studieren bei CodeWar (Ruby) ④ case ~ when
Verhalten, wenn Platzhalter (**) in Ruby angegeben ist
Studieren bei CodeWar
Problemumgehung für Bundler.require-Fehler beim Ausführen von Ruby mit crontab
Erste Schritte mit Ruby
Evolve Eve mit Ruby
Was passiert mit Instanzvariablen beim Kopieren einer Instanz mit Ruby?
Ein Memo bei der Übergabe von Ruby Silver mit einem offiziellen Lehrbuch
Wechseln Sie die Ruby-Version mit rbenv
Ich habe DI mit Ruby versucht
GraphQL Client beginnend mit Ruby
Ruby: Mail mit Starttls senden
Formatieren Sie Ruby mit VS-Code
Wie man ganze Zahlen mit Rubin überprüft
Fehler beim Spielen mit Java
[Ruby] Problem mit der if-Anweisung
Verwenden Sie Ruby mit Google Colab
Erste Schritte mit Ruby-Modulen
[ruby] Eine Methode mit einem Argument aufrufen