[Swift] Lorsque vous voulez savoir si le nombre de caractères dans String correspond à un certain nombre ...

introduction

Vous avez peut-être entendu dire que "utilisez string.isEmpty au lieu de string.count == 0 "lorsque vous voulez savoir si une chaîne est vide. La raison en est que var count: Int in String est $ O (n) $, mais var is Empty: Bool est $ O (1) $ [^ String.isEmpty].

[^ String.isEmpty]: Référence: Pourquoi isEmpty est meilleur que count == 0

Alors, comment savoir si le «compte» d'une chaîne est égal à un nombre quelconque?

extension String {
  func countIsEqual(to expectedCount: Int) -> Bool {
    //Pensez ici
  }
}

Exemple d'implémentation

Simple, alors △

Le plus simple serait:

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

mais attendez un instant. J'ai utilisé ʻis Empty pour vérifier si la chaîne était vide parce que countétait $ O (n) $. CecountIsEqual appelle en interne count`. Si «self» ne contient au plus que quelques caractères, c'est acceptable, mais si «self» peut contenir 10 millions de caractères, il ne peut pas être ignoré. Considérez un moyen de ne pas appeler «count».

Comptez de l'avant

Si vous n'utilisez pas count, vous devez le compter vous-même. Mais si vous le comptez vous-même, vous pouvez arrêter de compter quand il dépasse le «nombre attendu». Alors maintenant:

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

C’est facile, non?

Au fait, c'est aussi $ O (n) $, mais dans ce cas, $ n $ est "le plus petit de count et de ʻespected Count". Fondamentalement, si «count» et «attendu Count» ne changent pas beaucoup, la première implémentation simple peut être meilleure. Cependant, s'il y a une possibilité qu'une grande chaîne de caractères entre (intentionnellement ou non) en raison d'une entrée externe, par exemple, et que ʻexpectedCount devrait prendre une petite valeur, cliquez ici. La mise en œuvre de est plus utile.

Recommended Posts

[Swift] Lorsque vous voulez savoir si le nombre de caractères dans String correspond à un certain nombre ...
Un mémo lorsque vous souhaitez effacer la partie horaire de l'agenda
Si vous souhaitez satisfaire la couverture de test des méthodes privées dans JUnit
Que faire si vous obtenez une erreur de nombre d'arguments erroné dans binding.pry
Si vous souhaitez inclure la classe parente dans @builder de Lombok
Que faire lorsque vous souhaitez connaître la position source où la méthode est définie dans binding.pry
Si vous souhaitez simuler une méthode dans RSpec, vous devez utiliser la méthode allow pour mock et la méthode singleton.
Conseils lorsque vous souhaitez insérer de nombreux sauts de ligne et tabulations lors du remplacement d'une chaîne de caractères
Je veux connaître le JSP du portlet ouvert lors du développement de Liferay
Comment trouver le nombre total de pages lors de la pagination en Java
Lorsque vous souhaitez ajouter une colonne de type chaîne avec une longueur limitée avec la commande `rails generate migration`
[RSpec] Lorsque vous souhaitez utiliser la variable d'instance du contrôleur dans le test [attribuer n'est pas recommandé]
Que faire si l'opération non autorisée s'affiche lors de l'exécution d'une commande dans le terminal
Lorsque vous souhaitez lier InputStream dans JDBI3
Une note quand vous voulez Tuple en Java
Lorsque vous souhaitez utiliser la méthode à l'extérieur
[Swift] Utilisez nonzeroBitCount lorsque vous voulez popcnt dans Swift
[Ruby] Lorsque vous souhaitez remplacer plusieurs caractères
[Swift] Comment obtenir le nombre d'éléments dans un tableau (super basique)
Comment obtenir l'ID d'un utilisateur qui s'est authentifié avec Firebase dans Swift
Je veux obtenir récursivement la superclasse et l'interface d'une certaine classe
[rails] Option After utile lorsque vous souhaitez modifier l'ordre des colonnes DB
Que faire si vous ne pouvez pas obtenir le texte d'un élément dans Selenium
[outil java] Un outil utile lorsque vous souhaitez envoyer régulièrement le journal ipmsg de PC-A au PC spécifié.
Si vous faites une erreur dans l'emplacement de description de Gem, supprimez Gemfile.lock une fois.
Je veux connaître la réponse de l'application Janken
[Java] Lors de la mise d'une chaîne de caractères dans le cas de l'instruction switch, il est nécessaire d'en faire une expression constante
Même si je souhaite convertir le contenu d'un objet de données en JSON en Java, il existe une référence circulaire ...
[Rails] Je souhaite afficher la destination du lien de link_to dans un onglet séparé
[Swift] Comment afficher les caractères saisis sur le Widget via UserDefaults lors de l'utilisation du WidgetKit
Lorsque vous souhaitez remplacer dynamiquement l'annotation dans Java 8
Je veux que vous racontiez que l'erreur a été résolue lorsque vous avez poignardé le chargeur dans le coin de la tête
# 1_JAVA Je veux obtenir le numéro d'index en spécifiant un caractère dans la chaîne de caractères
Je veux trouver la somme de contrôle MD5 d'un fichier en Java et obtenir le résultat sous forme de chaîne de caractères en notation hexadécimale.
Si hash [: a] [: b] [: c] = 0 dans Ruby, je veux que vous étendiez récursivement même si la clé n'existe pas
[Ruby] Prenez l'habitude d'utiliser la méthode dup lors de la copie d'une variable chaîne
Lorsque je suis passé à IntelliJ, il y avait une grande différence dans l'encodage du fichier de propriétés.
Lorsque vous souhaitez modifier le libellé à afficher lors de la création d'une zone de sélection à partir d'énumération
Utilisez JLine lorsque vous souhaitez gérer les frappes sur la console caractère par caractère en Java
[Tutoriel Rails Chapitre 2] Que faire lorsque vous faites une erreur dans le nom de la colonne
Lorsque vous souhaitez refléter les informations de la branche principale dans la branche actuelle sur laquelle vous travaillez actuellement
Que faire lorsqu'une exception java.io.IOException se produit dans GlassFish
Comment changer une chaîne dans un tableau en un nombre dans Ruby
Je veux appeler une méthode et compter le nombre
Le nième et le n + 1er caractères d'une chaîne Ruby
Un programme qui compte le nombre de mots dans une liste
Trouvez le nombre de jours dans un mois avec Kotlin
Une collection de modèles dont vous voulez être conscient pour ne pas compliquer le code
Comparaison des chaînes de version lorsque vous souhaitez brancher le traitement entre deux versions (implémentation Java)
À propos de la méthode de conversion d'une chaîne de caractères en entier / fraction (données de conversion) en Java