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);
    }
Esempio n. 3
0
 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);
    }