Menu
Coddy logo textTech

Schlüssel prüfen

Teil des Abschnitts Logik und Ablaufsteuerung der R-Journey von Coddy. Lektion 8 von 64.

Bevor du nach einem Schlüssel suchst, der möglicherweise fehlt, prüfe mit %in%, ob er in den Namen enthalten ist:

stock <- c(apples = 12, pears = 0)
print("pears" %in% names(stock))
print("plums" %in% names(stock))

Ausgabe:

[1] TRUE
[1] FALSE

Ein if um die Suche herum liefert einen Standardwert für einen fehlenden Schlüssel statt eines NA oder eines Fehlers:

stock <- c(apples = 12, pears = 0)
item <- "plums"
qty <- if (item %in% names(stock)) stock[[item]] else 0
print(qty)

Ausgabe:

[1] 0

Ein vorhandener Schlüssel mit dem Wert 0 unterscheidet sich von einem fehlenden Schlüssel: pears ist bekannt und out of stock, plums wird überhaupt nicht verkauft.

Listen verwenden dieselbe Prüfung mit %in% names(). Ein fehlender Name in einer Liste gibt NULL statt eines Fehlers zurück, daher funktioniert auch is.null():

user <- list(name = "Ada", city = "London")
print(is.null(user[["email"]]))
print("city" %in% names(user))

Ausgabe:

[1] TRUE
[1] TRUE

Eine kleine Hilfsfunktion sorgt dafür, dass die Prüfung an einer Stelle bleibt, wenn ein Programm viele Schlüssel nachschlägt:

get_or <- function(x, key, default) {
  if (key %in% names(x)) x[[key]] else default
}
stock <- c(apples = 12)
print(get_or(stock, "apples", 0))
print(get_or(stock, "kiwis", 0))

Ausgabe:

[1] 12
[1] 0
challenge icon

Aufgabe

Einfach

Vervollständige stock_status(stock, item). Gib unknown zurück, wenn item kein Schlüssel von stock ist, out of stock, wenn sein Wert 0 ist, und andernfalls in stock: gefolgt von der Menge.

Der bereitgestellte Code liest den Lagerbestand als durch Kommas getrennte name=quantity-Paare ein, dann den Artikel und gibt den zurückgegebenen Wert aus.

Probier es selbst

stock_status <- function(stock, item) {
  # Schreibe deinen Code hier
  ""
}

# Vorgegebener Eingabe-/Ausgabecode: Lass ihn unverändert
input <- suppressWarnings(readLines(file("stdin")))
stock <- c()
for (pair in strsplit(input[1], ",")[[1]]) {
  kv <- strsplit(pair, "=")[[1]]
  stock[kv[1]] <- as.numeric(kv[2])
}
cat(stock_status(stock, input[2]), sep = "\n")
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik und Ablaufsteuerung

Übe selbstständig: Online-R-Compiler