У меня есть класс, который хранит значения и определяет, различны ли эти наборы значений.
public class TextRecords
{
public TextRecords()
{
Count = 0;
TextInstanceDictionary = new Dictionary<string, int>();
}
public int Count
{
get;
set;
}
public Dictionary<string, int> TextInstanceDictionary
{
get;
set;
}
public void AddOrUpdateTextInstanceDictionary(string theText)
{
if (!TextInstanceDictionary.ContainsKey(theText))
{
TextInstanceDictionary.Add(theText, 1);
}
else
{
TextInstanceDictionary[theText] += 1;
}
}
public bool AllValuesAreDistinct
{
get
{
return !TextInstanceDictionary.Any(kv => kv.Value > 1);
}
}
}
Это отлично работает для небольших наборов значений, но не масштабируется с точки зрения использования памяти и производительности.
Есть ли способ определить, является ли набор значений уникальным, не сохраняя их все в памяти, как я делаю в подходе выше?
Я ищу разумные небольшой объем памяти при сохранении хорошего уровня скорости.
Я знаю фильтры Блума и прочитал этот ответ . Есть ли какие-либо другие методы решения этой очень специфической проблемы c?
(Примечание: я также просмотрел этот ответ , но это другая проблема. Я транслирую значения по одному, поэтому просто нужно знать, видел ли я это значение раньше или не видел. Другой ответ - когда вам предоставляется полностью заполненная коллекция и спрашивается, различны ли значения).