Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在不将值存储在内存中的情况下检测值集合是否不同(唯一)_C#_Algorithm_Dictionary_Distinct - Fatal编程技术网

C# 如何在不将值存储在内存中的情况下检测值集合是否不同(唯一)

C# 如何在不将值存储在内存中的情况下检测值集合是否不同(唯一),c#,algorithm,dictionary,distinct,C#,Algorithm,Dictionary,Distinct,我有一个类,它存储值并检测这组值是否不同 public class TextRecords { public TextRecords() { Count = 0; TextInstanceDictionary = new Dictionary<string, int>(); } public int Count { get; set; } public Dict

我有一个类,它存储值并检测这组值是否不同

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);
        }
    }
}
公共类文本记录
{
公共档案
{
计数=0;
TextInstanceDictionary=新字典();
}
公共整数计数
{
得到;
设置
}
公共词典文本实例词典
{
得到;
设置
}
public void addor updateTextInstanceDictionary(字符串文本)
{
如果(!TextInstanceDictionary.ContainsKey(文本))
{
text instancedictionary.Add(文本,1);
}
其他的
{
TextInstanceDictionary[theText]+=1;
}
}
公共资产的所有价值都受到限制
{
得到
{
return!TextInstanceDictionary.Any(kv=>kv.Value>1);
}
}
}
这适用于较小的值集,但在内存使用和性能方面不具有可扩展性


是否有一种方法可以检测一组值是否唯一,而不必像我在上述方法中所做的那样将它们全部存储在内存中?

我正在寻找合理的小内存占用,同时保持良好的速度水平

我知道布卢姆过滤器和阅读。有没有其他方法可以解决这个非常具体的问题


(注意:我也检查了,但这是一个不同的问题。我正在一个接一个地输入值,所以只需要知道我以前是否看到过该值。另一个答案是,您将看到一个完全填充的集合,并询问这些值是否不同)。

这是元素差异性问题,一个经过充分研究的问题,具有已知的理论边界。标记为dupe的线程讨论了该问题的理论边界和几种解决方案。“有没有一种方法可以检测一组值是否唯一,而不必像我在上述方法中所做的那样将它们全部存储在内存中?”您现在如何存储它们?它是磁盘上的文本文档还是什么?您可以填充2个缓冲区列表/dict/which(排序!)并逐个匹配值,并在出现相同值时将其从这两个列表中“删除”,如果值大致按相同顺序流动,则可以节省大量内存。如果它们不相同,或者顺序相反,最终可能只会节省一半的内存,并且计算成本很高。您的值是字符串。这些字符串是否具有允许压缩它们的特定特征?如果值较大,则可以存储值的散列而不是实际值,以节省内存。但是你需要在某个地方存储一些东西(磁盘可以用来最小化内存使用,但代价是速度的数量级),以了解你以前是否见过{thing}。