2009-11-02 3 views
2

У меня есть DataTable со следующими столбцами:быстрый способ для сопоставления DataTable и массив строк в C#

  • Ид
  • MSISDN
  • статус
  • another_column

И a string[2][n] массив (многомерный):

{msisdn, status, useless_data}. , ,

Мне нужно начинать с 0 по n в массиве строк и искать поле msisdn в таблице данных. И обновите столбец status в поле данных из поля состояния строкового массива.

В datatable msisdn не уникально. Более одного столбца может содержать sama msisdn два или более. Однако в строковом массиве msisdn уникален.

Каков самый быстрый способ сопоставить этот массив DataTable и String и сделать что-то еще?

Любые идеи или помощь будут оценены.

+1

Первый из этих таблиц ориентирован на телекоммуникационную отрасль, следовательно, поле «msisdn», поэтому им нужно только здесь, но другие столбцы - это StartDate и EndDate (следовательно, несколько записей), поэтому вам нужна запись с последней версией StartDate , EndDate для этой записи, скорее всего, будет NULL, это поле статуса DataTable, которое вам нужно специально обновить, делает упорядочение действительным в DataTable и изменяет поиск. Просто мысль. – Neil

ответ

4

Во-первых, я надеюсь, что ваше объявление строкового массива больше похоже на string[n][2], а не на string[2][n]. Для целей этого ответа я собираюсь предположить, что это так, и это просто опечатка.

Самый быстрый способ, скорее всего, с DataView, хотя LINQ to DataSet s в .NET 3.5 может быть таким же хорошим. Что-то вроде этого:

DataView view = new DataView(yourDataTable); 
string[][] data = new string[n][2]; 

view.Sort = "msisdn"; 

for(int i = 0; i < theArray; i++) 
{ 
    view.RowFilter = "msisdn = '" + data[i][0] + "'"; 

    foreach(DataRowView row in view) 
    { 
     row["status"] = data[i][1]; 
    } 
} 
1

Вопрос в размере 100 000 долл. США заключается в том, сортируются ли данные или могут быть легко отсортированы. Если одна или обе эти коллекции отсортированы по msisdn, операция будет намного быстрее: O (n) для ни отсортированного, O (n log n) для 1 отсортированного, O (n) для обоих.

Конечно, алгоритм, который вы используете, будет меняться в зависимости от этого ответа, поэтому нам нужно услышать ответ на это, прежде чем мы сможем дать более подробную информацию.

+0

Учитывая, что он утверждает, что данные находятся в 'DataTable', который, казалось бы, отвечает на все эти вопросы. Однако, поскольку 'DataView' поддерживает индекс столбца в отсортированном столбце, я не думаю, что порядок массива будет влиять на время фильтрации. –

2

Поскольку MSISDN является уникальным в массиве, вы могли бы рассмотреть возможность сделать этот массив словарь ключом по MSISDN вместо этого. Итерации через строки только один раз и посмотреть ключ в словаре, как вы идете.

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