求一个排序提取的算法
一个文件(大约40M)
文件里面每一行都是一个网址
如一个文件:
http://forum.csdn.net/PointForum/Forum/PostTopic.aspx
http://forum.csdn.net/
http://csdn.net/
....
求:显示文件里面重复最多的10个网址,的算法!!!
速度要快!
格式如下:
------------------------------------
重复次数最多的10名
http://csdn.net/ 重复1000次
http://forum.XXXX.net/ 重复800次
http://XX.net/ 重复500次
.....
我比较笨,请写具体思路,或代码,谢谢
其实这个就类似“51啦”网页流量统计
[解决办法]
- C# code
public class TCount { private string _Url; public string Url { get { return _Url; } set { _Url = value; } } private int _Count; public int Count { get { return _Count; } set { _Count = value; } } public TCount(string _Url, int _Count) { this._Url = _Url; this._Count = _Count; } } public class DoCount { private string _FilePath; public string FilePath { get { return _FilePath; } set { _FilePath = value; } } public DoCount(string _FilePath) { this._FilePath = _FilePath; } /// <summary> /// 读取数据,并统计 /// </summary> /// <returns></returns> public IList<TCount> CountUrl() { IList<TCount> IT = new List<TCount>(); StreamReader sr = new StreamReader(this._FilePath); while (sr.ReadLine()!=null) { IT = ReCorrectCount(IT, sr.ReadLine()); } sr.Close(); return IT; } private IList<TCount> ReCorrectCount(IList<TCount> IT, string url) { int i = 0; bool blnIn = false; //用于标识url是否已存在于IT中 foreach(TCount T in IT){ if (T.Url == url) { //如果存在,则更新统计数 IT[i].Count += 1; blnIn = true; break; } i++; } if (!blnIn)//如果不存在则添加新项 IT.Add(new TCount(url, 1)); return IT; } }