Menu
CoddyTech

Suchfunktion

Teil des Abschnitts Objektorientierte Programmierung der GDScript-Journey von Coddy. Lektion 59 von 65.

challenge icon

Aufgabe

Mittel

Füge eine Titelsuche hinzu. Behalte alles bei, was du in den vorherigen Schritten geschrieben hast; nur library.gd ändert sich.

Schreibe search_by_title(text: String) -> Array[Book] in Library. Die Funktion gibt alle Bücher zurück, deren Titel text enthält, und zwar in der Reihenfolge von books:

  • Bei der Suche wird die Groß- und Kleinschreibung ignoriert: GREAT findet The Great Gatsby.
  • Ein Teil des Titels reicht aus: great findet auch Great Expectations.
  • Ein leeres text gibt alle Bücher zurück. Prüfe diesen Fall zuerst: In GDScript ist "" in "Dune" false.
  • Ausgeliehene Bücher werden wie alle anderen Bücher gefunden.

Der bereitgestellte Code fügt den Befehl search TEXT hinzu, der ausgibt, wie viele Bücher gefunden wurden, und eine Zeile pro Buch. Für diese Eingabe:

Community
book The Great Gatsby|F. Scott Fitzgerald|123456
book To Kill a Mockingbird|Harper Lee|789012
book Great Expectations|Charles Dickens|345678
search great
search zzz

lautet die Ausgabe:

Results for 'great': 2
- The Great Gatsby by F. Scott Fitzgerald
- Great Expectations by Charles Dickens
Results for 'zzz': 0

Dein Code gehört in book.gd, user.gd und library.gd. main.gd enthält den bereitgestellten Ein-/Ausgabecode und darf nicht bearbeitet werden.

Probier es selbst

extends Node

func _ready():
	# Vorgegebener Ein-/Ausgabecode: unverändert lassen
	var library := Library.new(OS.read_string_from_stdin())
	var line := OS.read_string_from_stdin()
	while line != "":
		var parts := line.split(" ", true, 1)
		var fields: PackedStringArray = parts[1].split("|") if parts.size() > 1 else PackedStringArray()
		match parts[0]:
			"book":
				library.add_book(Book.new(fields[0], fields[1], fields[2]))
			"user":
				library.add_user(User.new(fields[0], fields[1]))
			"borrow":
				print(library.borrow_book(fields[0], fields[1]))
			"search":
				var term: String = parts[1] if parts.size() > 1 else ""
				var found: Array = library.search_by_title(term)
				print("Results for '%s': %d" % [term, found.size()])
				for book in found:
					print("- ", book.title, " by ", book.author)
			"loans":
				var reader: User = library.find_user(fields[0])
				print(reader.user_name, " has borrowed:")
				for isbn in reader.borrowed_isbns:
					print("- ", library.find_book(isbn).title)
			"holder":
				var book: Book = library.find_book(fields[0])
				if book.available:
					print(book.title, " is on the shelf")
				else:
					print(book.title, " is borrowed by ", library.find_user(book.borrower_id).user_name)
			"books":
				for book in library.books:
					print(book)
			"users":
				for user in library.users:
					print(user)
			"show":
				print(library)
		line = OS.read_string_from_stdin()

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-GDScript-Compiler