Kontaktnamen auflisten
Teil des Abschnitts Logik & Ablauf der Kotlin-Journey von Coddy. Lektion 24 von 63.
Aufgabe
SchwerVervollständige contactBook mit den Parametern commands: List<String>, names: List<String>, phones: List<String>. Erstelle ein im Speicher befindliches Kontaktbuch, das bei jedem Funktionsaufruf leer beginnt. Die drei Listen haben die gleiche Länge, höchstens 100. An jedem Index wählt commands eine Operation aus; names und phones liefern deren Argumente. Namen sind nichtleere Wörter aus Kleinbuchstaben des ASCII-Zeichensatzes; Telefonnummern sind nichtleere Ziffernfolgen und müssen als Zeichenketten erhalten bleiben, damit führende Nullen bewahrt werden. Jeder Befehl erzeugt eine Antwort in der zurückgegebenen Liste. Behalte alles bei, was du in den vorherigen Schritten geschrieben hast, einschließlich aller früheren Befehle und Antworten. Unterstütze PUT: Speichere die Telefonnummer für den angegebenen Namen oder ersetze sie, und antworte anschließend mit saved. Füge FIND hinzu: Antworte mit der gespeicherten Telefonnummer für den angegebenen Namen oder mit missing. Sein Telefonnummernargument wird ignoriert. Füge REMOVE hinzu: Entferne den angegebenen Namen und antworte mit removed, wenn er vorhanden war, andernfalls mit missing. Sein Telefonnummernargument wird ignoriert. Füge LIST hinzu: Antworte mit der sortierten Liste der gespeicherten Namen im standardmäßigen, von Kotlin verwendeten Format mit eckigen Klammern, zum Beispiel [ada, bo], oder mit [], wenn sie leer ist. Beide Argumentwerte werden ignoriert. Verwende contacts.keys.sorted().toString(), um diese eine Antwortzeichenkette zu erstellen. Die Eingaben enthalten nur Befehle, die in diesem Schritt unterstützt werden. Ignorierte Argumentzeichenketten können beliebige nichtleere Texte sein.
Sofern oben keine strengeren Grenzen angegeben sind, enthalten Sammlungen auf jeder Ebene höchstens 100 Elemente, und ganzzahlige Argumente sowie ganzzahlige Sammlungswerte liegen zwischen -1000 und 1000. Für das Parsen bereitgestellter Text kann ungültige oder außerhalb des zulässigen Bereichs liegende Darstellungen enthalten, wie beschrieben.
Gib einen Wert vom Typ List<String> zurück. Behalte den bereitgestellten Eingabe-/Ausgabecode bei. Er liest skalare Argumente jeweils in einer eigenen Zeile; eine Liste beginnt mit ihrer Anzahl, gefolgt von ihren Elementen, und eine Map beginnt mit der Anzahl ihrer Einträge, gefolgt von jedem Schlüssel und Wert. Verschachtelte Listen wiederholen für jede Zeile das Format aus Anzahl und Elementen. Das bereitgestellte main gibt den Rückgabewert gefolgt von einem Zeilenumbruch aus. Listen verwenden das standardmäßige, von Kotlin verwendete Format mit eckigen Klammern; gib keine zusätzlichen Bezeichnungen aus.
Probier es selbst
fun contactBook(commands: List<String>, names: List<String>, phones: List<String>): List<String> {
val contacts = mutableMapOf<String, String>()
val replies = mutableListOf<String>()
for (i in commands.indices) {
val name = names[i]
when (commands[i]) {
"PUT" -> {
contacts[name] = phones[i]
replies.add("saved")
}
"FIND" -> replies.add(contacts[name] ?: "missing")
"REMOVE" -> {
if (contacts.containsKey(name)) {
contacts.remove(name)
replies.add("removed")
} else replies.add("missing")
}
}
}
return replies
}
fun main() {
val commandsCount = readln().toInt()
val commands = mutableListOf<String>()
for (i0 in 0 until commandsCount) {
val commandsItem = readLine().orEmpty()
commands.add(commandsItem)
}
val namesCount = readln().toInt()
val names = mutableListOf<String>()
for (i0 in 0 until namesCount) {
val namesItem = readLine().orEmpty()
names.add(namesItem)
}
val phonesCount = readln().toInt()
val phones = mutableListOf<String>()
for (i0 in 0 until phonesCount) {
val phonesItem = readLine().orEmpty()
phones.add(phonesItem)
}
println(contactBook(commands, names, phones))
}Alle Lektionen in Logik & Ablauf
1Maps Teil 1
Maps erstellenSichere Maps-ZugriffeMaps aktualisierenSchlüssel prüfenRückblick – Lagerverwaltung4Verschachtelte Sammlungen
Listen von ListenZeilen durchlaufenZeilenzusammenfassungenVerschachtelte Listen abflachenRückblick – Sitzreihen7Collection-Pipelines
Transformieren mit MapWerte filternSammlungsregeln testenMit Fold akkumulierenRückblick – genehmigte Summen10Textverarbeitung
Teilen und ZusammenfügenTexte effizient erstellenTextmuster abgleichenSuchen und ErsetzenRückblick – Code bereinigen13Abschließende Herausforderungen
Herausforderung – WortanalyseHerausforderung – PunkteprüfungHerausforderung – Geteilte Vorräte2Maps Teil 2
Map-Einträge durchlaufenSchlüssel und WerteHäufigkeits-MapsVerschachtelte MapsRückblick – Häufigkeitsbericht5Projekt – Kontaktbuch
Kontakte speichernKontakte finden3Mengen und Mitgliedschaft
Mengen erstellenMengen aktualisierenMengenoperationenTeilmenge prüfenRückblick – Gäste der Veranstaltung6Funktionswerte
Lambdas schreibenFunktionstypenFunktionen übergebenErfasste VariablenRückblick – Konfigurierbare PunktzahlÜbe selbstständig: Kotlin-Playground