Разбейте строку, преобразуйте ToList <int> () в одну строку

192

У меня есть строка, которая имеет номера

string sNumbers = "1,2,3,4,5";

Я могу разделить его, а затем преобразовать в List<int>

sNumbers.Split( new[] { ',' } ).ToList<int>();

Как я могу преобразовать массив строк в список целых чисел? Так что я смогу преобразовать string[]вIEnumerable

uzay95
источник
У нас был точно такой же вопрос сегодня: нажмите меня
Дарио
3
в «одной линии» очень сильное требование! </ Perl>
DFA
2
Этот вопрос, в частности, говорит, чтобы разбить строку чисел, что делает ответ простым. Вопрос, который Дарио упомянул, относится к проблемам TryParse для общих строк.
Goodeye

Ответы:

468
var numbers = sNumbers.Split(',').Select(Int32.Parse).ToList();
MQP
источник
4
Это получает исключение, когда список имеет пустое значение или ноль.
сказал Мухаммед Идриес
@ SayedM.Idrees просто отметьте ноль или пусто перед разделением.
РАВИ ВАГЕЛА
31

Вы также можете сделать это без необходимости Linq:

List<int> numbers = new List<int>( Array.ConvertAll(sNumbers.Split(','), int.Parse) );

// Uses Linq
var numbers = Array.ConvertAll(sNumbers.Split(','), int.Parse).ToList();
Joze
источник
18

Путь Джозе тоже нужен LINQ, ToList()находится в System.Linqпространстве имен.

Вы можете преобразовать Array в List без Linq, передав массив в конструктор List:

List<int> numbers = new List<int>( Array.ConvertAll(sNumbers.Split(','), int.Parse) );
yuxio
источник
18

Лучше использовать, int.TryParseчтобы избежать исключений;

var numbers = sNumbers
            .Split(',')
            .Where(x => int.TryParse(x, out _))
            .Select(int.Parse)
            .ToList();
aozogul
источник
10

Также возможно использовать массив int для прямого присваивания значения.

как это

int[] numbers = sNumbers.Split(',').Select(Int32.Parse).ToArray();
Мукеш Калгуде
источник
4

также вы можете использовать этот метод расширения

public static List<int> SplitToIntList(this string list, char separator = ',')
{
    return list.Split(separator).Select(Int32.Parse).ToList();
}

использование:

var numberListString = "1, 2, 3, 4";
List<int> numberList = numberListString.SplitToIntList(',');
Pcodea Xonos
источник
3

На Unity3d int.Parseплохо работает. Поэтому я использую как ниже.

List<int> intList = new List<int>( Array.ConvertAll(sNumbers.Split(','),
 new Converter<string, int>((s)=>{return Convert.ToInt32(s);}) ) );

Надеюсь, что эта помощь для пользователей Unity3d.

HyoJin KIM
источник
3

Вы можете использовать новые возможности языка C # 6.0:

  • замените делегата (s) => { return Convert.ToInt32(s); }соответствующей группой методовConvert.ToInt32
  • заменить избыточный вызов конструктора: new Converter<string, int>(Convert.ToInt32)на:Convert.ToInt32

Результат будет:

var intList = new List<int>(Array.ConvertAll(sNumbers.Split(','), Convert.ToInt32));
Адриан Филип
источник
2

Моя проблема была похожа, но с неудобством, что иногда строка содержит буквы (иногда пустые).

string sNumbers = "1,2,hh,3,4,x,5";

Попытка следовать методу расширения Pcode Xonos:

public static List<int> SplitToIntList(this string list, char separator = ',')
{
      int result = 0;
      return (from s in list.Split(',')
              let isint = int.TryParse(s, out result)
              let val = result
              where isint
              select val).ToList(); 
}
Карлос Толедо
источник
1
Спасибо, хотя вы объявляете разделитель, а затем не используете его.
Хьюго Делсинг
-2

Вы можете использовать это:

List<Int32> sNumberslst = sNumbers.Split(',').ConvertIntoIntList();
Charanjot
источник
2
Добро пожаловать в стек переполнения! Хотя этот фрагмент кода может решить вопрос, в том числе объяснение действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин, по которым вы предлагаете код. Также постарайтесь не переполнять ваш код пояснительными комментариями, так как это снижает удобочитаемость кода и пояснений!
До свидания StackExchange
2
Функция ConvertIntoIntList не завершается.
Федерико Наваррете
Также вам необходимо добавить следующий класс: статический публичный класс HelperMethods {статический публичный список <int> ConvertIntoIntList (this string [] stringList) {int x = 0; var intList = stringList.Where (str => int.TryParse (str, out x)) .Select (str => x) .ToList (); вернуть intList; }}
Федерико Наваррете