문자열을 분할하여 ToList() 를 한 줄 로 변환합니다.
번호가 있는 문자열이 있습니다.
string sNumbers = "1,2,3,4,5";
분할한 후 변환합니다.List<int>
sNumbers.Split( new[] { ',' } ).ToList<int>();
문자열 배열을 정수 목록으로 변환하려면 어떻게 해야 합니까?그래서 내가 개종할 수 있도록string[]
로.IEnumerable
var numbers = sNumbers?.Split(',')?.Select(Int32.Parse)?.ToList();
최신 버전의 C#(v6+)에서는 null 조건부 연산자를 사용하여 null 체크를 인라인으로 실행할 수 있습니다.
또한 다음과 같은 방법으로 Linq를 사용하지 않고 수행할 수 있습니다.
List<int> numbers = new List<int>( Array.ConvertAll(sNumbers.Split(','), int.Parse) );
// Uses Linq
var numbers = Array.ConvertAll(sNumbers.Split(','), int.Parse).ToList();
더 나은 사용int.TryParse
예외를 피하기 위해
var numbers = sNumbers
.Split(',')
.Where(x => int.TryParse(x, out _))
.Select(int.Parse)
.ToList();
조즈의 방식에도 LINQ가 필요하지만ToList()
인System.Linq
네임스페이스.
배열을 목록 생성자에게 전달하여 Linq 없이 배열에서 목록으로 변환할 수 있습니다.
List<int> numbers = new List<int>( Array.ConvertAll(sNumbers.Split(','), int.Parse) );
배열을 삽입하여 값을 직접 할당할 수도 있습니다.
이것처럼.
int[] numbers = sNumbers.Split(',').Select(Int32.Parse).ToArray();
새로운 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));
또한 이 확장 방법을 사용할 수 있습니다.
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(',');
Unity3d에서는int.Parse
잘 작동하지 않습니다.그래서 저는 벨로우처럼 써요.
List<int> intList = new List<int>( Array.ConvertAll(sNumbers.Split(','),
new Converter<string, int>((s)=>{return Convert.ToInt32(s);}) ) );
이것이 Unity3d 사용자에게 도움이 되기를 바랍니다.
문제는 비슷하지만 문자열에 문자가 포함되어 있는(비어 있는 경우도 있습니다) 불편함이 있었습니다.
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();
}
제네릭스가 있는데 왜 int만 고집하는 거죠?다음과 같은 확장 방식은 어떻습니까?
public static List<T> Split<T>(this string @this, char separator, out bool AllConverted)
{
List<T> returnVals = new List<T>();
AllConverted = true;
var itens = @this.Split(separator);
foreach (var item in itens)
{
try
{
returnVals.Add((T)Convert.ChangeType(item, typeof(T)));
}
catch { AllConverted = false; }
}
return returnVals;
}
그리고 나서.
string testString = "1, 2, 3, XP, *, 6";
List<int> splited = testString.Split<int>(',', out _);
다음을 사용할 수 있습니다.
List<Int32> sNumberslst = sNumbers.Split(',').ConvertIntoIntList();
언급URL : https://stackoverflow.com/questions/911717/split-string-convert-tolistint-in-one-line
'sourcecode' 카테고리의 다른 글
코드를 통해 줄 바꿈 셀에 줄 바꿈 삽입 (0) | 2023.04.19 |
---|---|
INotify를 구현하지 않고 바인딩이 업데이트되는 이유는 무엇입니까?속성이 변경되었습니까? (0) | 2023.04.19 |
C#의 대소문자를 무시하고 두 문자열 비교 (0) | 2023.04.19 |
모든 git 하위 모듈에 대한 최신 변경 내용 가져오기 (0) | 2023.04.19 |
홈브루 패키지가 설치되어 있는지 감지 (0) | 2023.04.19 |