Подтвердить что ты не робот

Parse int [] из "1,2,3"

У меня есть раскрывающийся список мультиселектов, называемый идентификатором, который отправляет идентификатор = 1,2,3, который мне нужно разобрать в целочисленный массив, чтобы использовать Contains() в методе фильтрации. В настоящий момент я использую:

string[] ids = Request["ID"].Split(',');

Что мне не очень нравится, потому что его медленнее сравнивать строку, чем int. Любые предложения?

4b9b3361

Ответ 1

Request["ID"].Split(',').Select(x=>int.Parse(x)).ToArray();

Конечно, это будет означать, что если какая-либо из итоговых числовых строк не является "обрабатываемой" (существует ли такое слово?).

Ответ 2

Это зависит от того, сколько раз вы будете искать в массиве, если преобразование в int выполняется быстрее или сравнение строк выполняется быстрее.

HashSet<int> ids = new HashSet<int>(from s in Request["ID"].Split(',')
                                    select int.Parse(s));

Но, возможно, самый быстрый, если у вас много id: s будет создавать HashSet<string>:

HashSet<string> = new HashSet<string>(string[] ids = Request["ID"].Split(','));

Ответ 3

int[] ids = Request["ID"].Split(',').Select(Convert.ToInt32).ToArray();

Ответ 4

Во-первых:

string[] arr = Request["ID"].Split(',')

Тогда:

Array.ConvertAll(arr, s => Int32.Parse(s));
Array.ConvertAll(arr, Int32.Parse);

arr.Select(s => Int32.Parse(s));
arr.Select(Int32.Parse);

Тогда:

new HashSet<int>(result);

(самый быстрый контейнер для выполнения Contains())

См. также:

Ответ 5

Если у вас нет linq, вы можете:

string[] ids = Request["ID"].Split(',');
int[] items = new int[ids.Length];
for(int i = 0; i<ids.Length; i++)
{
  items[i] = int.Parse(ids[i]);
}