[Swift] Wenn Sie wissen möchten, ob die Anzahl der Zeichen in String mit einer bestimmten Anzahl übereinstimmt ...

Einführung

Möglicherweise haben Sie gehört, dass "stringisEmpty" anstelle von "string.count == 0" verwendet wird, wenn Sie herausfinden möchten, ob ein String leer ist. Der Grund ist, dass var count: Int in String $ O (n) $ ist, aber var is Empty: Bool` ist $ O (1) $ [^ String.isEmpty].

[^ String.isEmpty]: Referenz: Warum isEmpty besser ist als count == 0

Wie können Sie also herausfinden, ob die Anzahl einer Zeichenfolge einer beliebigen Zahl entspricht?

extension String {
  func countIsEqual(to expectedCount: Int) -> Bool {
    //Denken Sie hier
  }
}

Implementierungsbeispiel

Einfach, dann △

Am einfachsten wäre:

extension String {
  func countIsEqual(to expectedCount: Int) -> Bool {
    return self.count == expectedCount
  }
}

let string = "Qiita"
print(string.countIsEqual(to: 1)) // -> false
print(string.countIsEqual(to: 5)) // -> true
print(string.countIsEqual(to: 10)) // -> false

aber bitte warte einen Moment. Ich habe isEmpty verwendet, um zu überprüfen, ob die Zeichenfolge leer war, weil count $ O (n) $ war. Dieses countIsEqual ruft intern count auf. Wenn "Selbst" höchstens ein paar Zeichen enthält, ist dies akzeptabel, aber wenn "Selbst" 10 Millionen Zeichen umfassen kann, kann es nicht ignoriert werden. Überlegen Sie, wie Sie "count" nicht aufrufen können.

Von vorne zählen

Wenn Sie nicht "count" verwenden, müssen Sie es selbst zählen. Wenn Sie jedoch selbst zählen, können Sie die Zählung beenden, wenn die erwartete Anzahl überschritten wird. Also jetzt:

extension String {
  func countIsEqual(to expectedCount: Int) -> Bool {
    guard expectedCount >= 0 else { return false }

    var countNow = 0
    for _ in self {
      countNow += 1
      if countNow > expectedCount {
        return false
      }
    }
    return countNow == expectedCount
  }
}

let string = "Qiita"
print(string.countIsEqual(to: 1)) // -> false
print(string.countIsEqual(to: 5)) // -> true
print(string.countIsEqual(to: 10)) // -> false

Es ist einfach, oder?

Übrigens ist dies auch $ O (n) $, aber in diesem Fall ist $ n $ "der kleinere Wert von" count "und" expectedCount "". Grundsätzlich kann die erste einfache Implementierung besser sein, wenn sich "count" und "expectedCount" nicht so stark ändern. Wenn jedoch die Möglichkeit besteht, dass beispielsweise aufgrund externer Eingaben eine große Zeichenfolge eingeht (ob beabsichtigt oder nicht) und "expectedCount" voraussichtlich einen kleinen Wert annimmt, klicken Sie hier. Die Implementierung von ist nützlicher.

Recommended Posts

[Swift] Wenn Sie wissen möchten, ob die Anzahl der Zeichen in String mit einer bestimmten Anzahl übereinstimmt ...
Ein Memo, wenn Sie den Zeitteil des Kalenders löschen möchten
Wenn Sie die Testabdeckung privater Methoden in JUnit erfüllen möchten
Was tun, wenn in bind.pry eine falsche Anzahl von Argumenten angezeigt wird?
Wenn Sie die übergeordnete Klasse in Lomboks @builder aufnehmen möchten
Was tun, wenn Sie die Quellposition wissen möchten, an der die Methode in bind.pry definiert ist?
Wenn Sie eine Methode in RSpec verspotten möchten, sollten Sie die Methode allow für mock und die Singleton-Methode verwenden.
Tipps, wenn Sie beim Ersetzen einer Zeichenfolge viele Zeilenumbrüche und Tabulatoren einfügen möchten
Ich möchte die JSP des offenen Portlets bei der Entwicklung von Liferay kennen
So ermitteln Sie die Gesamtzahl der Seiten beim Paging in Java
Wenn Sie mit dem Befehl "Rails Generate Migration" eine Spalte vom Typ "String" mit begrenzter Länge hinzufügen möchten
[RSpec] Wenn Sie die Instanzvariable des Controllers im Test verwenden möchten [Zuweisungen wird nicht empfohlen]
Was tun, wenn der Vorgang nicht zulässig ist, wenn ein Befehl im Terminal ausgeführt wird?
Wenn Sie InputStream in JDBI3 binden möchten
Ein Hinweis, wenn Sie Tupel in Java möchten
Wenn Sie die Methode außerhalb verwenden möchten
[Swift] Verwenden Sie nonzeroBitCount, wenn Sie in Swift popcnt möchten
[Ruby] Wenn Sie mehrere Zeichen ersetzen möchten
[Swift] So ermitteln Sie die Anzahl der Elemente in einem Array (Super Basic)
So erhalten Sie die ID eines Benutzers, der sich in Swift bei Firebase authentifiziert hat
Ich möchte rekursiv die Oberklasse und die Schnittstelle einer bestimmten Klasse erhalten
[Rails] After-Option nützlich, wenn Sie die Reihenfolge der DB-Spalten ändern möchten
Was tun, wenn Sie den Text eines Elements in Selen nicht abrufen können?
[Java-Tool] Ein nützliches Tool, wenn Sie das IPMSG-Protokoll von PC-A regelmäßig an den angegebenen PC senden möchten.
Wenn Sie an der Position von Gem einen Fehler gemacht haben, löschen Sie Gemfile.lock einmal.
Ich möchte die Antwort der Janken-App wissen
[Java] Wenn Sie eine Zeichenfolge in die switch-Anweisung einfügen, müssen Sie sie zu einem konstanten Ausdruck machen
Auch wenn ich den Inhalt eines Datenobjekts in Java in JSON konvertieren möchte, gibt es einen Zirkelverweis ...
[Rails] Ich möchte das Linkziel von link_to auf einer separaten Registerkarte anzeigen
[Swift] So zeigen Sie die eingegebenen Zeichen im Widget über UserDefaults an, wenn Sie das WidgetKit verwenden
Wenn Sie Annotation in Java 8 dynamisch ersetzen möchten
Ich möchte, dass Sie die Geschichte erzählen, dass der Fehler behoben wurde, als Sie das Ladegerät in die Ecke Ihres Kopfes gestochen haben
# 1_JAVA Ich möchte die Indexnummer durch Angabe eines Zeichens in der Zeichenfolge erhalten
Ich möchte die MD5-Prüfsumme einer Datei in Java finden und das Ergebnis als Zeichenfolge in hexadezimaler Notation erhalten.
Wenn in Ruby Hash [: a] [: b] [: c] = 0 ist, möchten wir, dass Sie rekursiv erweitern, auch wenn der Schlüssel nicht vorhanden ist
[Ruby] Gewöhnen Sie sich an, beim Erstellen einer Kopie einer Zeichenfolgenvariablen die dup-Methode zu verwenden
Als ich zu IntelliJ wechselte, gab es einen großen Unterschied in der Codierung der Eigenschaftendatei.
Wenn Sie den Wortlaut ändern möchten, der angezeigt werden soll, wenn Sie ein Auswahlfeld aus enum erstellen
Verwenden Sie JLine, wenn Sie Tastenanschläge auf der Konsole zeichenweise in Java verarbeiten möchten
[Rails Tutorial Kapitel 2] Was tun, wenn Sie einen Fehlern im Spaltennamen machen?
Wenn Sie die Hauptzweiginformationen in dem aktuellen Zweig wiedergeben möchten, an dem Sie gerade arbeiten
Was tun, wenn in GlassFish eine java.io.IOException auftritt?
So ändern Sie eine Zeichenfolge in einem Array in eine Zahl in Ruby
Ich möchte eine Methode aufrufen und die Nummer zählen
Das n-te und n + 1-Zeichen einer Ruby-Zeichenfolge
Ein Programm, das die Anzahl der Wörter in einer Liste zählt
Finden Sie mit Kotlin die Anzahl der Tage in einem Monat
Eine Sammlung von Mustern, die Sie kennen möchten, um den Code nicht zu komplizieren
Vergleich von Versionszeichenfolgen, wenn Sie die Verarbeitung zwischen zwei Versionen verzweigen möchten (Java-Implementierung)
Informationen zur Methode zum Konvertieren einer Zeichenfolge in eine Ganzzahl / einen Bruch (Umwandlungsdaten) in Java