2016-04-14 2 views
0

Я хочу сравнить две таблицы. Я хочу получить результат типа Equal/Unequal, если строки x и y не равны. Поэтому нужно сообщить все возможное, но я не знаю, что это лучший способ. Все, что мне нужно, это несколько примеров, чтобы получить лучшее представление о то, что:Сравнивать таблицы эффективно

Мой 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

отредактировал: hope clear now .. – 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 очень полезно спасибо! Теперь, если у меня есть не найденные строки, как проверить, похожа ли одна строка на нефиксированную строку? – Ams1

+0

@ Ams1: то, что * похоже *, например. это '1' * похоже * на' 2'? на '12'? –

+0

Строка 1: 1, c, x, y Строка 2: 1, c, x, z Строка 2 и 1 аналогична или это было бы плохо делать? – Ams1

Смежные вопросы