2013-07-21 42 views
0

我有一個文本文件,其中包含幾乎100000條目。所有這些都在一定的模式,像
word1 word2 word3 word4在C中獲取基於子串的唯一字符串#

但是許多內容都是重複的,所有的話都是一樣的。當我試圖讀取和形成一個數組或唯一的列表時,我正在使用一箇中間散列集來實現這一點。它工作得很好。
但基本上我想實現的只是word2的唯一條目。正如在word2是常見的,其他所有不同,我想保留任何一個條目。
e.g
cat dog lion tiger
cat dog deer bear
mouse rat bear deer
lion tiger cat dog
cat dog deer bear

在這種情況下所需的輸出將是:
cat dog lion tiger
mouse rat bear deer
lion tiger cat dog


cat dog deer bear
mouse rat bear deer
lion tiger cat dog

目前什麼哈希集合所賜是:

cat dog lion tiger
cat dog deer bear
mouse rat bear deer
lion tiger cat dog

對於數據集很大的情況下如何有效地實現這一點有任何建議。使用正則表達式是唯一的選擇嗎?我正在使用C#。

回答

1

查看數據並將第二個單詞放在字典中以知道它是否出現過。 代碼示例:

string[] file = { "cat dog lion tiger", 
        "cat dog deer bear", 
        "mouse rat bear deer", 
        "lion tiger cat dog", 
        "cat dog deer bear"}; 

    Dictionary<string, string> dict = new Dictionary<string, string>(); 

    List<string> lst = new List<string>(); 

    foreach (string s in file) 
    { 
     string[] words = s.Split(' '); 
     // assumption - thare are at least 2 words in a line - validate it 
     if (!dict.ContainsKey(words[1])) 
     { 
      lst.Add(s); 
      dict.Add(words[1], words[1]); 
     } 
    } 

    foreach (string s1 in lst) 
     Console.WriteLine(s1); 
+0

謝謝:)工作就像一個魅力:) – sachin11

0

您可以創建一個附配類存儲字符串和實現接口的IEqualityComparer到HashSet的,

例子:

 HashSet<WordsRow> list = new HashSet<WordsRow>(new WordsRow()); 

     list.Add(new WordsRow("cat dog lion tiger")); 
     list.Add(new WordsRow("cat dog deer bear")); 
     list.Add(new WordsRow("mouse rat bear deer")); 
     list.Add(new WordsRow("lion tiger cat dog")); 
     list.Add(new WordsRow("cat dog deer bear")); 


     foreach (WordsRow row in list) 
     { 
      Console.WriteLine(row.Row); 
     } 

「WordRow類」 必須包含以下::

public class WordsRow : IEqualityComparer<WordsRow> 
{ 
    public string Row {get; set;} 

    public WordsRow() { } 

    public WordsRow(string row) 
    { 
     this.Row = row;       
    } 

    public bool Equals(WordsRow x, WordsRow y) 
    { 
     return x.Row.Split(' ')[1] == y.Row.Split(' ')[1]; 
    } 

    public int GetHashCode(WordsRow obj) 
    { 
     return obj.Row.Split(' ')[1].GetHashCode(); 
    } 
} 
相關問題