У меня есть словарь, в котором хранятся всевозможные биграммы(a:b,b:c,a:b,a:c). В результативном словаре должны хранится ключ-значения
Если ключ-значение встречается один раз, либо значение общего ключа повторяется больше другого значения, то они не будут записаны
В исходном словаре { a:b, b:c, a:b, a:c }
В результативном словаре будет { a:b, b:c }
В данном случае a:c не запишется, потому что ключ с данным значением имеет меньше значение повторений.
}
В исходном словаре : { 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>();
Вопрос: Добрать нужно до первого стринга и проверить количество повторений. Подскажите как это сделать? Спасибо!
доступ можно получить так:
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;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
На форуме Unity нашёл решение для ранее появившейся у меня проблемы, связанной с пересечение двух ScrollRect'ов(горизонтально и вертикально)Однако,...
Пытаюсь в Unity3D с помощью компонента VideoPlayer отобразить видео по URL (с IP-камеры)При подключении требуется указать логин и пароль
Нужно предоставить WebApi доступ к UserManager<ApplicationUser> (AspNetCoreIdentity)
За один кадр триггер должны покидать несколько объектов и удаляться из пула, но OnTriggerExit отрабатывает один объект из десятка