Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

174
Views
Necesito eliminar todos los símbolos de una cadena para crear un `IEqualityComparer` que ignore los símbolos de puntuación.

En parte de mi aplicación, tengo una opción que muestra una lista de álbumes del artista actual que no están en la biblioteca de música. Para obtener esto, llamo a una API de música para obtener la lista de todos los álbumes de ese artista y luego elimino los álbumes que están en la biblioteca actual.

Para hacer frente a las diferentes mayúsculas y minúsculas de los nombres y la posibilidad de faltar (o puntuación adicional) en el título, he escrito un IEqualityComparer para usar en la llamada .Except :

 var missingAlbums = allAbumns.Except(ownedAlbums, new NameComparer());

Este es el método Equals :

 public bool Equals(string x, string y) { // Check whether the compared objects reference the same data. if (ReferenceEquals(x, y)) return true; // Check whether any of the compared objects is null. if (x is null || y is null) return false; return string.Compare(x, y, CultureInfo.CurrentCulture, CompareOptions.IgnoreCase | CompareOptions.IgnoreSymbols) == 0; }

Este es el método GetHashCode :

 public int GetHashCode(string obj) { // Check whether the object is null if (obj is null) return 0; // Make lower case. How do I strip symbols? return obj.ToLower().GetHashCode(); }

Esto falla, por supuesto, cuando la cadena contiene símbolos, ya que no los elimino antes de obtener el código hash, por lo que las dos cadenas (por ejemplo, "Baa, baa, oveja negra" y "Baa baa oveja negra") todavía no son iguales incluso después de convertir a minúsculas.

He escrito un método que eliminará los símbolos, pero eso significaba que tenía que adivinar cuáles son realmente esos símbolos. Funciona para los casos que he probado hasta ahora, pero espero que falle eventualmente. Me gustaría un método más confiable para eliminar los símbolos.

Dado que CompareOptions.IgnoreSymbols existe, ¿hay algún método al que pueda llamar que elimine estos caracteres de una cadena? ¿O en su defecto, un método que devuelva todos los símbolos?

Encontré el método IsPunctuation para los caracteres, pero no puedo determinar si lo que se considera puntuación es lo mismo que lo que la opción de comparación de cadenas considera un símbolo.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Si va a usar la enumeración CompareOptions , creo que también podría usarla con la clase CompareInfo para la que está documentado como diseñado:

Define las opciones de comparación de cadenas para usar con CompareInfo .

Luego puede usar el método GetHashCode(string, CompareOptions) de esa clase (e incluso el método Compare(string, string, CompareOptions) si lo desea).

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!