-1
votes

Comment obtenez-vous de l'index d'une chaîne avec plusieurs caractères possibles?

J'ai besoin d'une fonction qui peut obtenir le premier index d'un de plusieurs caractères possibles. Je ne veux pas utiliser Regex à cause de la mauvaise performance. J'ai essayé d'obtenir la min de deux indexof (s) mais cela ne fonctionne pas quand il est contenu dans une chaîne et non l'autre car -1 est plus petit que les deux index.

public static int IndexOf (this string s, char a, char b) => 
    Math.Min(s.IndexOf(a), s.IndexOf(b));


1 commentaires

J'ai trouvé que vous pouvez utiliser indexofany.


3 Réponses :


-1
votes

Réponse simple: xxx

ou pour plus de paramètres: xxx

Ceci fonctionne car -1 comme UINT sur des paramètres non contrôlés, -1 est équivalent à uint.maxvalue, ce qui signifie que cela est considéré comme une valeur la plus élevée possible signifiant que Min choisira un index plus petit si on existe.

Si les caractères que vous avez traitent de la même lettre si des cas différents, vous pouvez faire: xxx


2 commentaires

Cela ressemble donc à si aucun caractère n'existe, cette méthode retournera uint.maxvalue au lieu de -1 , est-ce correct?


@Rufusl, puisqu'il est renvoyé sur Int, il retournera -1.



0
votes

Si je comprends ce que vous demandez, il est d'obtenir le plus petit index entre les index de deux caractères dans une chaîne, mais le problème est que si seulement l'un d'entre eux existe, l'index de l'autre est renvoyé parce qu'il est < code> -1 .

Un moyen de résoudre consiste à tester pour tester -1 dans la première chaîne, puis décidez quoi faire avec la seconde: < Pré> xxx

Cependant, Il y a un problème avec cette méthode d'extension !!

car il existe une conversion implicite de char Pour int , cette méthode sera masquée par un Survol natif de l'index Méthode qui prend un Char et un int , qui retourne "l'indice zéro de la première occurrence du caractère spécifié, à partir de la position spécifiée."

i beli EVE En effet, les méthodes natives sont évaluées et choisies (s'il y a une correspondance implicite) avant que toutes les méthodes d'extension ne soient évaluées, mais je me trompe peut-être.

Pour contourner ce problème, nous pouvons simplement donner la méthode Nom différent: xxx

En outre, nous pouvons utiliser un argument paramètres pour laisser cette méthode gérer 0 à plusieurs Personnages à partir duquel trouver le premier index: xxx


0 commentaires

3
votes

Je suggère un peu plus complexe em>, mais j'espère plus pratique em> solution: xxx pré>

démo: p>

(3, d)


1 commentaires

Très bonne réponse. Cette solution dirige des cercles autour d'autres performances. Mieux l'utiliser.