codememo

LINQ를 사용하여 문자열[]을 코드 한 줄에서 int[]로 변환

tipmemo 2023. 5. 18. 21:04
반응형

LINQ를 사용하여 문자열[]을 코드 한 줄에서 int[]로 변환

문자열 형식의 정수 배열이 있습니다.

var arr = new string[] { "1", "2", "3", "4" };

더 나아가려면 '실제' 정수 배열이 필요합니다.

void Foo(int[] arr) { .. }

저는 그것을 캐스팅하려고 노력했지만 물론 실패했습니다.

Foo(arr.Cast<int>.ToArray());

다음에 할 수 있습니다.

var list = new List<int>(arr.Length);
arr.ForEach(i => list.Add(Int32.Parse(i))); // maybe Convert.ToInt32() is better?
Foo(list.ToArray());

또는

var list = new List<int>(arr.Length);
arr.ForEach(i =>
{
   int j;
   if (Int32.TryParse(i, out j)) // TryParse is faster, yeah
   {
      list.Add(j);
   }
 }
 Foo(list.ToArray());

둘 다 못생겼어요

그 일을 완료할 다른 방법이 있습니까?

배열이 지정된 경우 다음 방법을 사용할 수 있습니다.

int[] myInts = Array.ConvertAll(arr, s => int.Parse(s));

람다를 생략할 수 있다는 점을 지적해 준 Marc Gravell 덕분에 아래와 같이 더 짧은 버전이 생성됩니다.

int[] myInts = Array.ConvertAll(arr, int.Parse);

LINQ 솔루션은 추가로 필요하다는 점을 제외하고는 유사합니다.ToArray배열을 가져오려면 호출:

int[] myInts = arr.Select(int.Parse).ToArray();

편집: 배열로 변환합니다.

int[] asIntegers = arr.Select(s => int.Parse(s)).ToArray();

이렇게 하면 효과가 있습니다.

var asIntegers = arr.Select(s => int.Parse(s));

에서 예외를 방지하려면.Parse여기 몇 개 있습니다.TryParse대안들

구문 분석할 수 있는 요소만 사용하려면:

string[] arr = { null, " ", " 1 ", " 002 ", "3.0" };
int i = 0; 
var a = (from s in arr where int.TryParse(s, out i) select i).ToArray();  // a = { 1, 2 }

또는

var a = arr.SelectMany(s => int.TryParse(s, out i) ? new[] { i } : new int[0]).ToArray();

다음을 사용한 대안0구문 분석할 수 없는 요소의 경우:

int i; 
var a = Array.ConvertAll(arr, s => int.TryParse(s, out i) ? i : 0); //a = { 0, 0, 1, 2, 0 }

또는

var a = arr.Select((s, i) => int.TryParse(s, out i) ? i : 0).ToArray();

C# 7.0:

var a = Array.ConvertAll(arr, s => int.TryParse(s, out var i) ? i : 0);

다음을 통해 문자열 배열을 int 배열로 간단히 캐스팅할 수 있습니다.

var converted = arr.Select(int.Parse)
var asIntegers = arr.Select(s => int.Parse(s)).ToArray(); 

당신이 그것을 받지 않는지 확인해야 합니다.IEnumerable<int>답례로

var list = arr.Select(i => Int32.Parse(i));

언급URL : https://stackoverflow.com/questions/1297231/convert-string-to-int-in-one-line-of-code-using-linq

반응형