programing

쉼표로 구분된 문자열을 목록으로 변환하는 방법

closeapi 2023. 4. 26. 23:22
반응형

쉼표로 구분된 문자열을 목록으로 변환하는 방법

string tags = "9,3,12,43,2"

List<int> TagIds = tags.Split(',');

분할 메서드가 문자열[]을(를) 반환하므로 이 작업은 작동하지 않습니다.

한 가지 방법은 다음과 같습니다.

List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();

몇 가지 간단한 검증을 포함하고 잘못된 값을 건너뛰려면(예외를 던지는 대신) TryParse를 사용합니다.

string csv = "1,2,3,4,a,5";
int mos = 0;
var intList = csv.Split(',')
                    .Select(m => { int.TryParse(m, out mos); return mos; })
                    .Where(m => m != 0)
                    .ToList();

//returns a list with integers: 1, 2, 3, 4, 5

편집: 앙투안의 피드백을 기반으로 업데이트된 쿼리입니다.먼저 TryParse를 호출하여 잘못된 값을 필터링한 다음 Parse를 호출하여 실제 변환을 수행합니다.

string csv = "1,2,3,4,a,5,0,3,r,5";
int mos = 0;
var intList = csv.Split(',')
                    .Where(m => int.TryParse(m, out mos))
                    .Select(m => int.Parse(m))
                    .ToList();

//returns a list with integers: 1, 2, 3, 4, 5, 0, 3, 5

편집 2: 찰스 번즈의 피드백 덕분에 C# 7.0에 대한 업데이트된 쿼리입니다.이 접근 방식을 사용하면 추가 변수를 제거할 수 있으므로 좀 더 깔끔합니다.

string csv = "1,2,3,4,a,5,0,3,r,5";
var intList = csv.Split(',')
                 .Where(m => int.TryParse(m, out _))
                 .Select(m => int.Parse(m))
                 .ToList();

LINQ는 다음과 함께 사용할 수 있습니다.int.Parse()변환하기 위해string[]완전히IEnumerable<int>그리고 나서 그 결과를 그에게 전달합니다.List<T>생성자:

var tagIds = new List<int>(tags.Split(',').Select(s => int.Parse(s)));

약간의 LINQ는 큰 도움이 됩니다.

 List<int> TagIds = tags.Split(',')
         .Select(t => int.Parse(t))
         .ToList();

LINQ 쿼리 없이 이 방법을 선택할 수 있습니다.

string tags = "9,3,12,43,2";
List<string> numbers = nos.Split(',').ToList<string>();

그런 다음 이 목록을 정수 유형으로 변환할 수 있습니다.

string tags = "9,3,12,43,2"

List<int> TagIds = tags.Split(',').Select(x => x.Trim()).Select(x=> Int32.Parse(x)).ToList();

C# 3.5를 사용하는 경우 Linkq를 사용하여 이를 달성할 수 있습니다.

string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(s=>int.Parse(s)).ToList();

아니면 키가 작은 것.

string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(int.Parse).ToList();
string tags = "9,3,12,43,2";
List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();

저는 이것을 우연히 발견했고 저는 링크 없이 저만의 솔루션을 공유하고 싶습니다.이것은 원시적인 접근법입니다.정수가 아닌 값도 목록에 추가되지 않습니다.

List<int> TagIds = new List<int>();
string[] split = tags.Split(',');
foreach (string item in split)
{
    int val = 0;
    if (int.TryParse(item, out val) == true)
    {
        TagIds.Add(val);
    }
}

이게 도움이 되길 바랍니다.

칼리드13의 답변을 수정했습니다.사용자가 "0" 문자열을 입력하면, 그의 대답은 결과 목록에서 제거됩니다.저는 비슷한 일을 했지만 익명의 물건을 사용했습니다.

var result = commaSeparatedString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
            .Select(s => new { didConvert = int.TryParse(s.TrimNullProtection(), out convertedInt), convertedValue = convertedInt })
            .Where(w => w.didConvert)
            .Select(s => s.convertedValue)
            .ToList();

TrimNullProtection은 문자열이 null일 경우 보호하는 사용자 지정 함수입니다.

위의 작업은 오류 없이 변환할 수 없었던 문자열을 제거하는 것입니다.변환에 문제가 있는 경우 오류를 범해야 할 경우 수락된 답변으로 해결할 수 있습니다.

간단합니다.먼저 줄을 나눕니다.쉼표(,) 뒤에 있는 자르기 공백입니다.그런 다음 시스템 정의 ToList()를 사용합니다.

string inputText = "text1, text2"

',' 뒤의 공백을 제거하고 쉼표로 구분된 텍스트를 목록으로 변환하려면 다음과 같이 하십시오.

List<string> resultList = (inputText.Split(',')).Select(t => t).ToList();

언급URL : https://stackoverflow.com/questions/9301268/how-can-i-convert-comma-separated-string-into-a-listint

반응형