I have a class as such:
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));
}
}
Basically the class is a word, and whether or not it has been found in a search.
So I create a list of this class as such:
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 });
Then when I search the list to see if it contains a word, I want to set all wordIsFound values to 1 where appropriate. Some words in the list might be the same.
So something like
string wordSearch = "test";
if (wordsIn.Exists(x => x.wordTxt == wordSearch)) {
//set all wordIsFound = 1 where word matches wordSearch
}
So how would I set wordIsFound to 1 on the 1st and 3rd item in the list (the ones that match the wordSearch ?
CodePudding user response:
string wordSearch = "test";
foreach (cls_words clsword in wordsIn) {
if(cls_word.wordTxt == wordSearch) {
clsword.wordIsFound = 1;
}
}
CodePudding user response:
Easier approach might be to use a HashSet with your type (or even just a 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);
Obviously you're going to want to do some processing (set the words to a consistent case, empty the "found set" between trials, etc), but that should get you started.