Cómo establecer todos encontraron palabras de la lista de valores a la vez .NETA?

0

Pregunta

Tengo una clase como tal:

    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));
        }
    }

Básicamente, la clase es una palabra, y si o no se ha encontrado en una búsqueda.

Así que crear una lista de esta clase como tal:

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 });

Luego, cuando volví a buscar en la lista para ver si contiene más de una palabra, quiero establecer todos los wordIsFound valores de 1 cuando proceda. Algunas palabras de la lista sería el mismo.

Algo así como

string wordSearch = "test";

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

   //set all wordIsFound = 1 where word matches wordSearch 

}

Entonces, ¿cómo puedo establecer wordIsFound a 1 en el 1er y 3er elemento de la lista (los que se ajustan a la sopa de letras ?

.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

que es la mejor y única manera? en un bucle?
E.D.

gracias por las respuestas, yo pensé que podría ser una forma más elegante que un bucle. Por ejemplo, la línea de: `` si (wordsIn.Existe(x => x.wordTxt == sopa de letras)) { `` ....comprueba que todas las palabras, sin que sea un bucle. Sé que detrás de las escenas que se ha bucle, pero pensé que podría ser un código similar para el ajuste. Yo creo que no.
E.D.

@E. D. sí. Hay un ForEach función, pero internamente hace lo mismo con menos rendimiento y la legibilidad:S
Leandro Bardelli
0

Más fácil, podría ser la utilización de un HashSet con su tipo (o incluso sólo una 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);

Obviamente, usted va a querer hacer algún tipo de procesamiento (conjunto de las palabras de un coherente caso, vacía el "conjunto encontrado" entre los ensayos, etc), pero que debe empezar.

2021-11-23 21:42:34

En otros idiomas

Esta página está en otros idiomas

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