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}。