在记事本里有很多重复数据,如下
肉眼一看,就知道是3条重复的数据,我的问题就是如何过滤这些数据,最后只剩下3条。
注意实际数据非常多,格式就是上面的一样,每行一条邮箱地址。数据重复的位置不定。
我用的语言是C#,
无需数据库,写关键代码即可。
法一:利用数据库的查询,利用select distinct,参见http://q.cnblogs.com/q/24271/
法二:利用List的Contains方法,如果不包含该元素则加入List,参见http://www.cnblogs.com/codemo/archive/2012/06/01/MailDataFilter.html
灰常感谢,你还厉害了。
System.IO.FileInfo fileInfo = new System.IO.FileInfo(""); System.Windows.Forms.TextBox box = new System.Windows.Forms.TextBox(); using (System.IO.StreamReader reader = fileInfo.OpenText()) { box.Text = reader.ReadToEnd(); } var query = from line in box.Lines group line by line into lines where lines.Count() > 1 select lines.Key;
方法二:
跟方法一类似,不过不使用TextBox,而是使用集合(使用StreamReader的ReadLine逐条读取到一个集合中)
方法三:
定义一个枚举类,实现逐行读取:
class TextFileLines : IEnumerable<string>, IEnumerator<string> { StreamReader _reader; public TextFileLines(StreamReader reader) { _reader = reader; } IEnumerator<string> IEnumerable<string>.GetEnumerator() { string line; while ((line = _reader.ReadLine()) != null) { yield return line; } } }
System.IO.FileInfo fileInfo = new System.IO.FileInfo(""); string[] lines; using (System.IO.StreamReader reader = fileInfo.OpenText()) { lines = (from l in new TextFileLines(reader) group l by l into g where g.Count() > 1 select g.Key).ToArray(); }
方法一: