Розділити рядок, перетворити ToList <int> () в один рядок


192

У мене є рядок, який має числа

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

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

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

Як я можу конвертувати рядковий масив у цілий список? Так що я буду мати можливість конвертувати string[]вIEnumerable


У нас було точно таке ж питання сьогодні: Клацніть мені
Даріо,

3
в "одному рядку" si дуже сильний - це дуже сувора вимога! </perl>
dfa

2
Це запитання конкретно говорить про розділення рядка чисел, що дозволяє просто відповісти. У запитанні Даріо згадується про обробку (bogs down?) Питань TryParse для загальних рядків.
goodeye

Відповіді:


467
var numbers = sNumbers.Split(',').Select(Int32.Parse).ToList();

4
Отримайте виняток, коли у списку порожнє значення чи нуль.
Сейед Мухаммед

@ SayedM.Idrees просто перевіряйте нуль або порожній перед поділом.
RAVI VAGHELA

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();

18

Джозеві також потрібен LINQ ToList()- в System.Linqпросторі імен.

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

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

18

Краще використовувати, int.TryParseщоб уникнути винятків;

var numbers = sNumbers
            .Split(',')
            .Where(x => int.TryParse(x, out _))
            .Select(int.Parse)
            .ToList();

10

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

подобається це

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(',');

3

У Unity3d int.Parseне працює добре. Тому я використовую, як нижче.

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

Сподіваюся, що ця допомога для користувачів Unity3d.


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();

2
Ласкаво просимо до переповнення стека! Хоча цей фрагмент коду може вирішити питання, зокрема пояснення дійсно допомагає покращити якість вашої публікації. Пам'ятайте, що ви відповідаєте на запитання читачів у майбутньому, і ці люди можуть не знати причини вашої пропозиції щодо коду. Будь ласка, намагайтеся не переповнювати ваш код пояснювальними коментарями, оскільки це зменшує читабельність і коду, і пояснень!
Goodbye StackExchange

2
Функція ConvertIntoIntList не виходить.
Федеріко Наваррете

Також вам потрібно додати наступний клас: статичний публічний клас HelperMethods {статичний публічний список <int> ConvertIntoIntList (цей рядок [] stringList) {int x = 0; var intList = stringList.Where (str => int.TryParse (str, out x)) .Select (str => x) .ToList (); повернути intList; }}
Федеріко Наваррете
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.