C # Разбить строку целых чисел в IEnumerable <int> - PullRequest
4 голосов
/ 11 октября 2011

Мне нужно преобразовать строку целых чисел через запятую в список целых чисел.

Каков наилучший способ сделать это?

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

public IEnumerable<int> GetListOfIds()
{
    string Ids = "1,4,5,7,12"; // would be passed into method
    List<int> _result = Ids.Split(',')
                           .ToList()
                           .Select(item => int.Parse(item))
                           .ToList();

    return _result;
}

Ответы [ 4 ]

11 голосов
/ 11 октября 2011

Нет необходимости вызывать ToList, но в противном случае ваш код выглядит нормально:

public IEnumerable<int> GetListOfIds(string ids)
{
    return ids.Split(',').Select(item => int.Parse(item));
}

Вы также можете рассмотреть возможность добавления обработки ошибок в случае, если строка ввода недопустима:

public IEnumerable<int> GetListOfIds(string ids)
{
    foreach (string part in ids.Split(','))
    {
        int x;
        if (!int.TryParse(part, out x))
        {
            throw new ArgumentException(
                string.Format("The value {0} cannot be parsed as an integer.", part),
                "ids");
        }
        else
        {
            yield return x;
        }
    }
}
1 голос
/ 11 октября 2011

Вы можете, по крайней мере, опустить первый оператор ToList () - так что это будет

  List<int> _result = Ids.Split(',').Select(item => int.Parse(item)).ToList();
0 голосов
/ 31 марта 2018

Используйте пакет Nuget Stringify.Library

  1. Пример 1 (Разделитель по умолчанию неявно принимается в качестве запятой)
    var ids = "1, 4, 5, 7, 12"; var splitComma = new StringConverter().ConvertTo<List<int>>(ids);

  2. Пример 2 (явное указание разделителя)
    var ids = "1; 4; 5; 7; 12";<br> var splitColon = new StringConverter().ConvertTo<List<int>>(ids, new ConverterOptions { Delimiter = ';' });

0 голосов
/ 11 октября 2011

Вероятно, вы можете зациклить результат разбиения и сделать возвращение доходности int.Parse ... но я не ожидаю больших различий, если у вас не будет действительно много элементов в исходной строке.

...