Как определить, является ли набор значений различными (уникальными), не сохраняя их в памяти - PullRequest
2 голосов
/ 19 июня 2020

У меня есть класс, который хранит значения и определяет, различны ли эти наборы значений.

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?

(Примечание: я также просмотрел этот ответ , но это другая проблема. Я транслирую значения по одному, поэтому просто нужно знать, видел ли я это значение раньше или не видел. Другой ответ - когда вам предоставляется полностью заполненная коллекция и спрашивается, различны ли значения).

...