Как обратиться элементу ключа в словаре?

182
17 марта 2019, 04:30

Задача:

У меня есть словарь, в котором хранятся всевозможные биграммы(a:b,b:c,a:b,a:c). В результативном словаре должны хранится ключ-значения

Если ключ-значение встречается один раз, либо значение общего ключа повторяется больше другого значения, то они не будут записаны

Пример 1: {

В исходном словаре { a:b, b:c, a:b, a:c }

В результативном словаре будет { a:b, b:c }

В данном случае a:c не запишется, потому что ключ с данным значением имеет меньше значение повторений.

}

Пример 2: {

В исходном словаре : { a:b, b:c, a:b, a:c }

В результативном словаре будет { b:c, a:c }

Итеративно ключ-значение a:c > a:b.

}

Поэтому я завел промежуточный словарь wordCount, который хранит ключ-значение исходного словаря как ключ, а как значение количество повторений.

Перед тем как добавить в результативный словарь, идет проверка, есть ли такой ключ в словаре wordCount, если нет, добавляем его в словари wordCount(cо значением 1 - число повторений) и в результативный словарь.

Если ключ в результативном словаре есть, но имеет другое значение, необходимо проверить число повторений данного ключ-значения, и вес ключ-значения( это про итерации ). Теперь собственно зачем мне первый элемент ключа в словаре wordCount, чтобы проверить больше ли оно 2.

Словарь wordCount выглядит так:

var wordCount = new Dictionary<KeyValuePair<string, string>, int>();

Вопрос: Добрать нужно до первого стринга и проверить количество повторений. Подскажите как это сделать? Спасибо!

Answer 1

доступ можно получить так:

    static ((List<String> Key, List<String> Value) Keys, List<Int32> Values) GetDictionaryKeysValues(Dictionary<KeyValuePair<String, String>, Int32> dictionary)
    {
        //var keys = dictionary.Keys;
        ((List<String> Key, List<String> Value) Keys, List<Int32> Values) dic_key = ((null, null), null);
        foreach (var tt in dictionary)
        {
            dic_key.Keys.Key.Add(tt.Key.Key);
            dic_key.Keys.Value.Add(tt.Key.Value);
            dic_key.Values.Add(tt.Value);
        }
        return dic_key;
    }

Думаю так:

class Qwin : Queue<Char>
{
    public override string ToString()
    {
        return this.Aggregate("", (current, gg) => current + gg);
    }
    public override int GetHashCode()
    {
        return ToString().GetHashCode();
    }
    public override bool Equals(object obj)
    {
        var s = obj as Queue<char>;
        var ss = ToArray();
        var zz = s?.ToArray();
        return !ss.Where((t, i) => zz != null && t != zz[i]).Any();
    }
    public static Dictionary<string, int> TrigrammSearch(string text, int characters, int numberRepetitions)
    {
        var trigramDictionary = new Dictionary<string, int>();
        var trigramqueue = new Qwin();
        var trigramqueueTemp = new Qwin();
        var count = 0;
        var temp = "";
        foreach (var e in text)
        {
            trigramqueue.Enqueue(e);
            if (trigramqueue.Count != characters) continue;
            foreach (var a in text)
            {
                trigramqueueTemp.Enqueue(a);
                if (trigramqueueTemp.Count != characters) continue;
                var ads = trigramqueue.Equals(trigramqueueTemp);
                if (ads) count++;
                trigramqueueTemp.Dequeue();
            }
            temp = trigramqueue.Aggregate(temp, (current, gg) => current + gg);
            if (!trigramDictionary.ContainsKey(temp)) trigramDictionary.Add(temp, count);
            trigramqueue.Dequeue();
            temp = null;
            count = 0;
        }
        return trigramDictionary;
    }
READ ALSO
Нужна ваша помощь со скриптом под Unity

Нужна ваша помощь со скриптом под Unity

На форуме Unity нашёл решение для ранее появившейся у меня проблемы, связанной с пересечение двух ScrollRect'ов(горизонтально и вертикально)Однако,...

140
Отображение видео по URL в Unity3D с помощью компонента VideoPlayer с указанием логина и пароля

Отображение видео по URL в Unity3D с помощью компонента VideoPlayer с указанием логина и пароля

Пытаюсь в Unity3D с помощью компонента VideoPlayer отобразить видео по URL (с IP-камеры)При подключении требуется указать логин и пароль

318
AspNetCore2.1. Не работает mapping через Automapper для объекта IdentityUser (ApplicationUser-&gt;ApplicationUserDto)

AspNetCore2.1. Не работает mapping через Automapper для объекта IdentityUser (ApplicationUser->ApplicationUserDto)

Нужно предоставить WebApi доступ к UserManager<ApplicationUser> (AspNetCoreIdentity)

148
Несколько OnTriggerExit за кадр

Несколько OnTriggerExit за кадр

За один кадр триггер должны покидать несколько объектов и удаляться из пула, но OnTriggerExit отрабатывает один объект из десятка

169