当前位置:编程学习 > C#/ASP.NET >>

关于大数据量的字符串如何处理?

问题:现在我有很多的字符串大概有500万个需要处理,用什么样的数据类型在时空上比较合适?

具体的问题描述:有一大堆的字符串在一个txt中都是这样的格式21001221110011(每个串只有2,1,0这三种数字且都是14位)这样的数字串大概有200万个以上,现在要统计这些串中重复的数字串及其重复的次数,应该如何编程?(在时间和空间上尽量可行) --------------------编程问答-------------------- 按三进制读入为内部格式. --------------------编程问答--------------------
引用 1 楼 wuyi8808 的回复:
按三进制读入为内部格式.


何为内部格式,我也是按三进制来实现的,但对内存的需求太大,时间也很长。 --------------------编程问答-------------------- System.Int32  有符号 32 位整数 -2,147,483,648 到 2,147,483,647

3^14 = 4,782,969,而14位的0,1,2组成的串可以用 0 - 4,782,968 表示,内部用 int 表示足够了。 --------------------编程问答-------------------- 那统计我应该如何来完成 --------------------编程问答--------------------
  static int ReadStr(string s)
  {
    if (s.Length != 14) return -1; // 如果为了效率, 本行可以省略
    int x = 0;
    for (int i = s.Length - 1, d = 1; i >= 0; i--, d *= 3)
    {
      x += d * (int)(s[i] - '0');
    }
    return x;
  }
--------------------编程问答-------------------- 将他们转化为十进制的数以后如何来进行统计的操作,我没有好的算法呀!! --------------------编程问答-------------------- 请问楼主"这些串中重复的数字串及其重复的次数"的含义是什么,是最大重复字串吗?还是指定字串,比如“00”有多少个? --------------------编程问答-------------------- 建议看看严慧敏的数据结构中的 “哈弗曼编码”  --------------------编程问答-------------------- Mark --------------------编程问答--------------------
引用 7 楼 billdavis 的回复:
请问楼主"这些串中重复的数字串及其重复的次数"的含义是什么,是最大重复字串吗?还是指定字串,比如“00”有多少个?


每个串都是14位的数字串,这样的14位数字串有200多万个,我要统计14位串的重复次数 --------------------编程问答-------------------- 恩 --------------------编程问答--------------------     插入 sql表里,统计 sql 表 --------------------编程问答-------------------- 还是用二进制方式效率高些,毕竟计算机是二进制的
定义合适大小的缓冲区(byte数组),内部缓冲大小一般是4K(4096)
遍历判断即可,为了提高效率,可以使用unsafe代码 --------------------编程问答-------------------- 写数据库参数的方式进行存储
@parm
获取System.Text.StringBuider --------------------编程问答-------------------- 5楼的程序可行。构造一个数据库表格,设置列"data"为索引。
然后用SQL筛选,举个例子:

select distinct Data, count(*) as num
 from [数据库]
group by data

其中data是用5楼转换的数据,你看num列就是重复次数了。 --------------------编程问答--------------------
引用 13 楼 viena 的回复:
还是用二进制方式效率高些,毕竟计算机是二进制的
定义合适大小的缓冲区(byte数组),内部缓冲大小一般是4K(4096)
遍历判断即可,为了提高效率,可以使用unsafe代码

up --------------------编程问答--------------------             // 逐行读取文本,网上很多,我不写了。我写统计部分。
            string[] a = File.ReadAllLines(@"1.txt"); // 200万行不能用这个,我只是举例。
            Hashtable hs = new Hashtable();
            foreach (string b in a)
            {
                if (hs.ContainsKey(b))
                {
                    hs[b] = Convert.ToInt32(hs[b]) + 1; // 重复次数
                }
                else
                {
                    hs.Add(b, 1);
                }
            }
            IDictionaryEnumerator ide = hs.GetEnumerator();
            while(ide.MoveNext())
            {
                int y = Convert.ToInt32(ide.Value); // 大于2就是重复的,y是重复次数。
            }
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,