У меня есть DataTable
со следующими столбцами:
- ID
- MSISDN
- Статус
- another_column
И массив string[2][n]
(многомерный):
{msisdn, status, useless_data}.,.
Мне нужно начинать с 0 по n в строчном массиве и искать поле msisdn
в таблице данных. И обновите столбец status
в datatable из поля состояния строкового массива.
В datatable msisdn не уникально. Более одного столбца может содержать sama msisdn два или более. Однако в строковом массиве msisdn уникален.
Каков самый быстрый способ сопоставить этот массив DataTable и String и сделать что-то еще?
Любые идеи или помощь будут оценены.
Во-первых, я надеюсь, что объявление строкового массива больше похоже на 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];
}
}
Так как msisdn уникален в массиве, вы можете подумать о том, чтобы сделать этот массив словарем, на который ссылается msisdn. Итерации через строки только один раз и посмотреть ключ в словаре, как вы идете.
Вопрос в размере $100 000 заключается в том, сортируются ли данные или могут быть легко отсортированы. Если одна или обе эти коллекции отсортированы msisdn, операция будет намного быстрее: O (n 2) для ни отсортированного, O (n log n) для 1 отсортированного, O (n) для обоих.
Конечно, алгоритм, который вы используете, будет меняться в зависимости от этого ответа, поэтому нам нужно будет услышать ответ, прежде чем мы сможем дать более подробную информацию.
DataTable
, это, похоже, ответит на все эти вопросы. Однако, поскольку DataView
поддерживает индекс столбца в отсортированном столбце, я не думаю, что порядок массива повлияет на время фильтрации.