请写一个程序找出附件中文件重复的行
输出:
  输出一个文本文件,给出哪些行是重复的,第一次出现的行号,格式如下
  行号 此行的文本内容
  并给出此程序的运行时间
以下是代码,可是有些知识点不是太熟悉,看的头很大没看明白代码是怎么实现要求的。
请明白的帮我给每行代码加上注释,谢谢!
static void Main(string[] args)
        {
            TimeSpan ts1 = new TimeSpan(DateTime.Now.Ticks); //TimeSpan 我只知道是根据输入日期计算两个指定日期之间的时间间隔的意思,实际没用过。DateTime.Now是现在的时间,而DateTime.Now.Ticks是干吗的?网上查到的意思是“表示自 0001 年 1 月 1 日午夜 12:00:00 以来已经过的时间的以 100 毫微秒为间隔的间隔数。一个以0.1纳秒为单位的时间戳。”半懂不懂的...所以这第一句代码就没明白是怎么会事。
            StreamReader sr = new StreamReader(@"D:\文本.txt", System.Text.Encoding.Default); //StreamReader是什么什么读取流吧,这句的意思就是读取指定路径的文本文档吧?
            String strline="";
            int number=1
            StringBuilder sb=new StringBuilder();            Hashtable myHT=new Hashtable ();//定义哈希表,具体意义是?            while((strline=sr.ReadLine())!=null)//判断文本是不是空的?
            {     
                if (myHT.ContainsKey(strline))//myHT.ContainsKey()这个方法是做什么的?
                {
                    sb.Append(myHT[strline].ToString() + " " + strline + "\r\n");//往StringBuilder里加东西吧?
                }
                else
                {
                    myHT.Add(strline, number);//一行一行往哈希表里加?哈希表是用来放文档的?
                }
                number++;
            }
            //看到这基本就昏了,到不是全看不懂,只是放一起就昏了。后面的代码也尽量加上注释,谢谢了!
            sr.Close();
            StreamWriter wr = new StreamWriter(@"D:\1.txt");
            wr.Write(sb+"");
            wr.Close();            TimeSpan ts2 = new TimeSpan(DateTime.Now.Ticks); //?
            string spanTotalSeconds = ts2.Subtract(ts1).Duration().TotalSeconds.ToString(); //?
            Console.WriteLine(spanTotalSeconds);
            Console.ReadKey();
        }

解决方案 »

  1.   

    定义哈希表的key 是一行字符串,value是行号,while((strline=sr.ReadLine())!=null)//判断当前读的一行字符串是不是为空,为空就不要判断后面            {     
                    if (myHT.ContainsKey(strline))//判断当前这一行内容是不是已经存到哈希表了
                    {
                        sb.Append(myHT[strline].ToString() + " " + strline + "\r\n");//如果这一行内容已经添加过,则重复,把重复的内容放到sb中
                    }
                    else
                    {
                        myHT.Add(strline, number);//存入行的内容以及它的行号
                    }
                    number++;
                }
      

  2.   

    number:行号
    Hashtable: <字符串,初次出现的行号>
    StringBuilder:输出结果遍历文件,按行读出。
    如果hashtable中包含该行,说明该行曾经出现过,因此输出初次出现的行号以及该行内容
    否则,该行内容为首次出现,保存<该行内容,行号>到Hashtable
      

  3.   

    StreamReader sr = new StreamReader(@"D:\文本.txt", System.Text.Encoding.Default); //StreamReader是什么什么读取流吧,这句的意思就是读取指定路径的文本文档吧?
                String strline="";
                int number=1
                StringBuilder sb=new StringBuilder();            Hashtable myHT=new Hashtable ();//定义哈希表,判断重复行            while((strline=sr.ReadLine())!=null)//判断文本是否为空
                {     
                    if (myHT.ContainsKey(strline))//myHT.ContainsKey()判断数据在hashtable是否存在
                    {
                        sb.Append(myHT[strline].ToString() + " " + strline + "\r\n");//添加数据到StringBuilder
                    }
                    else
                    {
                        myHT.Add(strline, number);//哈希表不存在添加到哈希表
                    }
                    number++;//行号
                }
               sr.Close();//结束
      

  4.   

         TimeSpan ts2 = new TimeSpan(DateTime.Now.Ticks); //?
                string spanTotalSeconds = ts2.Subtract(ts1).Duration().TotalSeconds.ToString(); //?
                Console.WriteLine(spanTotalSeconds);
                Console.ReadKey();
    这部分代码的作用是不是计算整个程序的运行时间啊?