public int GetHash(string str, WordOrText type) { if (str == null || str == string.Empty) { throw new KeyNotFoundException(); } int sum = 0; for (int i = 0; i < str.Length; ++i) { sum += char.ToLower(str[i]); } return(type == WordOrText.Word ? sum % Words.Length : sum % Texts.Length); }
// Возвращает true, если word_or_text не было в словаре, иначе false public bool AddWordOrText(WordOrText type, string word_or_text, string translation) { if (word_or_text != null && translation != null && word_or_text != string.Empty && translation != string.Empty) { int index = GetHash(word_or_text, type); LinkedListWithTranslations word_or_text_translations = GetWordOrTextTranslation(word_or_text, index, type); if (word_or_text_translations != null) { bool have = false; foreach (var word_or_text_translation in word_or_text_translations) { if (word_or_text_translation.Equals(translation, System.StringComparison.CurrentCultureIgnoreCase)) { have = true; break; } } if (!have) { word_or_text_translations.AddLast(translation); } } else { LinkedListWithTranslations translations_list = new LinkedListWithTranslations(); translations_list.AddLast(translation); KeyValuePair <string, LinkedListWithTranslations> pair = new KeyValuePair <string, LinkedListWithTranslations>(word_or_text, translations_list); if (type == WordOrText.Word) { if (Words[index] == null) { Words[index] = new LinkedList <KeyValuePair <string, LinkedListWithTranslations> >(); } Words[index].AddLast(pair); } else { if (Texts[index] == null) { Texts[index] = new LinkedList <KeyValuePair <string, LinkedListWithTranslations> >(); } Texts[index].AddLast(pair); } return(true); } } return(false); }
public LinkedListWithTranslations GetWordOrTextTranslation(string word_or_text, WordOrText type) { if (word_or_text != string.Empty) { int index = GetHash(word_or_text, type); if (type == WordOrText.Word) { if (Words[index] == null) { return(null); } foreach (var pair in Words[index]) { if (pair.Key.Equals(word_or_text, System.StringComparison.CurrentCultureIgnoreCase)) { return(pair.Value); } } } else { if (Texts[index] == null) { return(null); } foreach (var pair in Texts[index]) { if (pair.Key.Equals(word_or_text, System.StringComparison.CurrentCultureIgnoreCase)) { return(pair.Value); } } } } return(null); }
public bool AddWordOrText(WordOrText type, string word_or_text, string translation_1, string translation_2, string translation_3, string translation_4, string translation_5) { if (word_or_text != null && translation_1 != null && translation_2 != null && translation_3 != null && translation_4 != null && translation_5 != null && word_or_text != string.Empty && (translation_1 != string.Empty || translation_2 != string.Empty || translation_3 != string.Empty || translation_4 != string.Empty || translation_5 != string.Empty)) { int index = GetHash(word_or_text, type); LinkedListWithTranslations word_or_text_translations = GetWordOrTextTranslation(word_or_text, index, type); if (word_or_text_translations != null) { bool have_1 = false; bool have_2 = false; bool have_3 = false; bool have_4 = false; bool have_5 = false; foreach (var word_or_text_translation in word_or_text_translations) { if (word_or_text_translation.Equals(translation_1, System.StringComparison.CurrentCultureIgnoreCase)) { have_1 = true; } if (word_or_text_translation.Equals(translation_2, System.StringComparison.CurrentCultureIgnoreCase)) { have_2 = true; } if (word_or_text_translation.Equals(translation_3, System.StringComparison.CurrentCultureIgnoreCase)) { have_3 = true; } if (word_or_text_translation.Equals(translation_4, System.StringComparison.CurrentCultureIgnoreCase)) { have_4 = true; } if (word_or_text_translation.Equals(translation_5, System.StringComparison.CurrentCultureIgnoreCase)) { have_5 = true; } if (have_1 && have_2 && have_3 && have_4 && have_5) { break; } } if (!have_1 && translation_1 != string.Empty) { word_or_text_translations.AddLast(translation_1); } if (!have_2 && translation_2 != string.Empty) { word_or_text_translations.AddLast(translation_2); } if (!have_3 && translation_3 != string.Empty) { word_or_text_translations.AddLast(translation_3); } if (!have_4 && translation_4 != string.Empty) { word_or_text_translations.AddLast(translation_4); } if (!have_5 && translation_5 != string.Empty) { word_or_text_translations.AddLast(translation_5); } } else { LinkedListWithTranslations translations_list = new LinkedListWithTranslations(); if (translation_1 != string.Empty) { translations_list.AddLast(translation_1); } if (translation_2 != string.Empty) { if (!translation_2.Equals(translation_1, System.StringComparison.CurrentCultureIgnoreCase)) { translations_list.AddLast(translation_2); } } if (translation_3 != string.Empty) { if (!translation_3.Equals(translation_1, System.StringComparison.CurrentCultureIgnoreCase) && !translation_3.Equals(translation_2, System.StringComparison.CurrentCultureIgnoreCase)) { translations_list.AddLast(translation_3); } } if (translation_4 != string.Empty) { if (!translation_4.Equals(translation_1, System.StringComparison.CurrentCultureIgnoreCase) && !translation_4.Equals(translation_2, System.StringComparison.CurrentCultureIgnoreCase) && !translation_4.Equals(translation_3, System.StringComparison.CurrentCultureIgnoreCase)) { translations_list.AddLast(translation_4); } } if (translation_5 != string.Empty) { if (!translation_5.Equals(translation_1, System.StringComparison.CurrentCultureIgnoreCase) && !translation_5.Equals(translation_2, System.StringComparison.CurrentCultureIgnoreCase) && !translation_5.Equals(translation_3, System.StringComparison.CurrentCultureIgnoreCase) && !translation_5.Equals(translation_4, System.StringComparison.CurrentCultureIgnoreCase)) { translations_list.AddLast(translation_5); } } KeyValuePair <string, LinkedListWithTranslations> pair = new KeyValuePair <string, LinkedListWithTranslations>(word_or_text, translations_list); if (type == WordOrText.Word) { if (Words[index] == null) { Words[index] = new LinkedList <KeyValuePair <string, LinkedListWithTranslations> >(); } Words[index].AddLast(pair); } else { if (Texts[index] == null) { Texts[index] = new LinkedList <KeyValuePair <string, LinkedListWithTranslations> >(); } Texts[index].AddLast(pair); } return(true); } } return(false); }