sourcecode

문자열을 분할하여 ToList()를 한 줄로 변환합니다.

copyscript 2023. 4. 19. 23:24
반응형

문자열을 분할하여 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

반응형