2016-04-14 10 views
0

2つのテーブルを比較したいと思います。行xとyが等しくない場合、Equal/Unequalのような出力を得たいです。可能な限りすべてが報告されるべきですが、私は最良の方法が何であるか分かりません。私に必要なのは、その良いアイデアを得るためにいくつかの例です:テーブルを効率的に比較する

マイTableModelクラス:

class TableModel { 
    private string tableName; 
    private string[] headers; 
    private string[] keys; 

    public int RowCount { get; set; } 
    public string TableName { get { return tableName; } set { this.tableName = value; } } 
    public string[] Headers { get { return headers; } set { this.headers = value; } } 
    public string[] Keys { get { return keys; } set { this.keys = value; } } 
} 

マイCompareクラス:

private void StartCompare() { 
     int counter = 0; 

     foreach(string nkey in newModel.Keys){ 
      foreach(string ckey in currentModel.Keys){ 
       if(!nkey.Equals(ckey)){ 
        counter++; 
       } 
      } 

      if(currentModel.Keys.Length -1 != counter){ 
       //row not found in currentModel 
      } 
     } 
    } 
+0

要件は不明です。 –

+0

編集された:希望クリア今.. – Ams1

答えて

0

の代わりに(問題のString[] Keys)の配列を比較します私はHashSet<String>を使用することをお勧めします。なぜなら、ハッシュベースの検索がより高速であるからです.O(1)はO(N)と比較して高速です。そのように:

HashSet<String> newKeys = new HashSet<String>(newModel.Keys); 
HashSet<String> currentKeys = new HashSet<String>(currentModel.Keys); 

foreach (String key in newKeys) 
    if (!currentKeys.Contains(key)) { 
    // The key is in the new model, but not in the current one 

    //TODO: put the relevant code here: 
    } 

foreach (String key in currentKeys) 
    if (!newKeys.Contains(key)) { 
    // The key is in the current model, but not in the new one 

    //TODO: put the relevant code here: 
    } 
+0

thats非常に有用な感謝! 今見つけられない行がある場合、1行がnotfound行と似ているかどうかを確認するにはどうすればよいですか? – Ams1

+0

@ Ams1:*類似*とは何ですか? '1' *' 2'と似ていますか? 「12」に? –

+0

Row1:1、c、x、y Row2:1、c、x、z 行2と1は似ていますか悪いですか? – Ams1

関連する問題