Быстрый способ сопоставления DataTable и String Array в C #

2

У меня есть DataTable со следующими столбцами:

  • ID
  • MSISDN
  • Статус
  • another_column

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

{msisdn, status, useless_data}.,.

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

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

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

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

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

3 ответа

4
Лучший ответ

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

Самый быстрый способ, вероятно, с DataView, хотя LINQ to DataSet в .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];
    }
}
2

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

1

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню