문자열 분할, 한 줄로 ToList <int> () 변환


192

숫자가있는 문자열이 있습니다.

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

분할해서 변환 할 수 있습니다 List<int>

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

문자열 배열을 정수 목록으로 변환하는 방법은 무엇입니까? 변환 할 수 string[]있도록IEnumerable


우리는 오늘 정확히 같은 질문을했습니다 : 클릭
Dario

3
"한 줄"에서 매우 강한 것은 매우 엄격한 요구 사항입니다! </ perl>
dfa

2
이 질문은 구체적으로 일련의 숫자를 분리하여 답을 간단하게 유지합니다. Dario가 언급 한 질문은 일반적인 문자열에 대한 TryParse 문제를 처리합니다.
goodeye

답변:


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

4
List에 빈 값이 있거나 null 인 경우 예외가 발생합니다.
무함마드 Idrees 말했다

@ SayedM.Idrees는 분할하기 전에 null 또는 비어 있는지 확인합니다.
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

Joze의 방법은 LINQ ToList()가 필요 하며 System.Linq네임 스페이스에 있습니다.

배열을 List 생성자에 전달하여 Linq없이 Array를 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 배열을 사용할 수도 있습니다.

이처럼

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
고맙지 만 구분 기호를 선언 한 다음 사용하지 않습니다.
Hugo Delsing

-2

이것을 사용할 수 있습니다 :

List<Int32> sNumberslst = sNumbers.Split(',').ConvertIntoIntList();

2
스택 오버플로에 오신 것을 환영합니다! 이 코드 스 니펫은 문제를 해결할 수 있지만 설명을 포함하면 게시물의 품질을 향상시키는 데 실제로 도움이됩니다. 앞으로 독자들에게 질문에 대한 답변을 제공하므로 해당 사람들이 코드 제안의 이유를 모를 수도 있습니다. 코드와 설명의 가독성을 떨어 뜨리므로 설명 주석으로 코드를 혼동하지 마십시오!
Goodbye StackExchange

2
ConvertIntoIntList 함수가 종료되지 않습니다.
Federico Navarrete 2016 년

또한 다음 클래스를 추가해야합니다. static public class HelperMethods {static public List <int> ConvertIntoIntList (this string [] stringList) {int x = 0; var intList = stringList.Where (str => int.TryParse (str, out x)) .Select (str => x) .ToList (); intList를 반환; }}
Federico Navarrete
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.