一个有10000多行,分行读取并存入hashtable中,想让hashtable有1000条时输出,最后不足1000条的也输出到一个文本中
Hashtable ht = new Hashtable( 1000 );
string line;
using (StreamReader sr = new StreamReader(inFilePath, Encoding.Default))
{
while (sr.Peek() >= 0)
{
line = sr.ReadLine();
ht.Add(line,null);
}
}
StreamWriter sw = new StreamWriter(outpath, false, Encoding.Default);
.....问题是初始化hashtable的大小后,所有的内容还是都加进了ht中
菜鸟请教
Hashtable ht = new Hashtable( 1000 );
string line;
using (StreamReader sr = new StreamReader(inFilePath, Encoding.Default))
{
while (sr.Peek() >= 0)
{
line = sr.ReadLine();
ht.Add(line,null);
}
}
StreamWriter sw = new StreamWriter(outpath, false, Encoding.Default);
.....问题是初始化hashtable的大小后,所有的内容还是都加进了ht中
菜鸟请教
using (StreamReader sr = new StreamReader(inFilePath, Encoding.Default))
{
while (sr.Peek() >= 0)
{
line = sr.ReadLine();
list.Add(line);
if (list.Count() > 1000)
{
StreamWriter sw = new StreamWriter(outpath, false, Encoding.Default);
...
}
}
}
楼主:Hashtable( 1000 )并不能限定hashtable的最终长度,所以在添加数据处还得自己判断。
HashTable可以清除么?
好,就算有一种数据结构可以。那么建立在要一次性把数据读进来的前提下,否则下1000条和上1000条的某条还是可能重复。如果可以一次性读取进来,那就更简单了:
List<string> list = new List<string>();
while (peek >0)
{
list.Add(...)
}
list = list.Distinct().ToList();
for (int i = 0; i < list.Count() / 1000 + 1)
{
var currentlist = list.Skip(i * 1000).Take(1000).ToList();
StreamWriter sw = new StreamWriter(outpath, false, Encoding.Default);
foreach (var item in currentlist)
{
//写入item
}
}
什么叫做“初始化hashtable的大小”?不管你怎么初始化“大小”,其保存的数据的多少也都是0。当Add的时候,假设预留的空间不够了,那么会自动扩展一倍大小的空间,并且重新hash。
Take() 会自动取剩下的,也就是说,Take(n),当序列多于n的时候,取得n条,当序列不足n的时候,有多少取多少。
那么也才 2MB,现在的内存都是 GB 级别的,有什么关系呢。你真的遇到性能问题,还是性能问题是想象中的。
//1000,你知道1000什么意思不