Comment définir tous les trouve la liste des mots les valeurs à la fois .NET?

0

La question

J'ai une classe en tant que telle:

    public class cls_words : IEquatable<cls_words>
    {
        public int indx { get; set; }
        public string wordTxt { get; set; }
        public int wordIsFound { get; set; }

        public override string ToString()
        {
            return "ID: " + wordIsFound + "   Name: " + wordTxt;
        }
        public override bool Equals(object obj)
        {
            if (obj == null) return false;
            cls_words objAsWord = obj as cls_words;
            if (objAsWord == null) return false;
            else return Equals(objAsWord);
        }
        public override int GetHashCode()
        {
            return wordIsFound;
        }

        public bool Equals(cls_words other)
        {
            if (other == null) return false;
            return (this.wordIsFound.Equals(other.wordIsFound));
        }
    }

Fondamentalement, la classe est un mot, et si oui ou non elle a été trouvée lors d'une recherche.

J'ai donc créer une liste de cette classe en tant que telle:

List<cls_words> wordsIn = new List<cls_words>();

wordsIn.Add(new cls_words { indx= 1, wordTxt = "test", wordIsFound=0 });
wordsIn.Add(new cls_words { indx= 2, wordTxt = "the", wordIsFound=0 });
wordsIn.Add(new cls_words { indx= 3, wordTxt = "test", wordIsFound=0 });

Puis, quand je recherche la liste pour voir si elle contient un mot, je veux mettre toutes les wordIsFound valeurs de 1, le cas échéant. Quelques mots dans la liste pourrait être la même.

Donc, quelque chose comme

string wordSearch = "test";

if (wordsIn.Exists(x => x.wordTxt == wordSearch)) {

   //set all wordIsFound = 1 where word matches wordSearch 

}

Alors, comment aurais-je mis wordIsFound à 1 sur le 1er et le 3ème élément de la liste (ceux qui correspondent aux mots cachés ?

.net c# list match
2021-11-23 21:30:19
2
0
string wordSearch = "test";
 foreach (cls_words clsword in wordsIn) {
   if(cls_word.wordTxt == wordSearch) {
      clsword.wordIsFound = 1;
   }
}
2021-11-23 21:35:17

qui est le meilleur/seule? dans une boucle?
E.D.

merci pour les réponses, je pensais qu'il pouvait être un moyen plus élégant qu'une boucle. Par exemple, la ligne: ` si (wordsIn.Il existe(x => x.wordTxt == mots cachés)) { `` ....vérifie tous les mots sans être une boucle. Je sais que derrière les coulisses, il a une boucle, mais j'ai pensé qu'il pourrait y avoir un code similaire pour le réglage. Je ne pense pas.
E.D.

@E. D. oui. Il y a une fonction ForEach mais en interne, fait la même chose avec moins de performance et de lisibilité:S
Leandro Bardelli
0

Plus facile d'approche pourrait être d'utiliser un HashSet avec votre type (ou même juste un string).

HashSet<string> foundWords = new HashSet<string>();
HashSet<string> allWords = new HashSet<string>(); 
allWords.Add("test"); 
allWords.Add("apple");
allWords.Add("test"); // This will just "fail silently" if the word is already in the allWords HashSet.

// then to test:
string wordSearch = "test";
if (allWords.Contains(wordSearch)) foundWords.Add(wordSearch);

// you can even loop over your input of a very big string with something like:
string bigString = "this is a long string with many words";
int maxWords = 1000;
string[] allWordsToTest = bigString.Split(' ', maxWords);
foreach (string s in allWordsToTest)
    if (allWords.Contains(s)) foundWords.Add(s);

Évidemment, vous allez avoir à effectuer un traitement (jeu de mots à une cohérence cas, vide le "jeu" entre les essais, etc), mais qui devrait vous obtenir a commencé.

2021-11-23 21:42:34

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................