Study/C#

구분자(delimiter)가 같은 문자열(string) 데이터를 특정 타입(type)의 어레이(array)로 변환하기

13.d_dk 2021. 1. 21. 23:29
728x90
반응형

문제의 정의

 제품의 데이터 로그를 문자열(string)의 연속으로 저장하여 남긴다고 가정하자. 예를 들어 위치 센서의 값이 데이터 로그로 저장되는 경우를 생각해보자. 이 위치센서의 값은 기준 대비 오일러(Euler) 좌표계로 값을 저장해둔다. 즉, Tx, Ty, Tz, Rx, Ry, Rz에 해당하는 값들이 저장되어 있다. 이러한 일련의 값들을 ','(comma)를 구분자(delimiter)로 두고 문자열로 저장해두었다. 이러한 데이터 로그를 읽어드려 더블(double) 타입의 변수에 저장하여 다루고자 한다. 즉, 문자열 데이터를 더블 타입의 어레이 변수로 저장하고자 한다. 이를 다이어그램(diagram)으로 표현하면 아래와 같다.

문제의 예시에 대한 수행 다이어그램

 

방법

 일반적인 방법을 먼저 소개하겠다. 먼저 문자열 값을 저장한 후 구분자로 분리를 수행하여 문자열 어레이로 변환한다. 이후 더블 타입 어레이를 문자열 정의한다. 이때 더블 타입 어레이의 크기는 문자열 어레이의 크기와 같다. 이후 for 루프(loop)로 문자열 어레이의 문자열을 하나하나 더블 타입으로 변환하여 이전에 정의한 더블 타입 어레이에 하나씩 저장한다.

 이보다 짧고 간략한 코드를 써보자. C#Array 클래스가 가지고 있는 Array.ConvertAll 메서드를 사용하여 특정 어레이를 변환하고자 하는 타입의 변수 어레이로 쉽게 변환할 수 있다. Array.ConvertAll 메서드가 필요로 하는 파라미터를 간단히 설명하면 아래의 그림과 같다.

Array.ConvertAll(TInput[] array, Converter<TInput, TOutput> converter)의 상세 파라미터 설명

 

 위의 설명한 방법과 메서드를 사용하여 테스트 코드를 작성하면 아래와 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            string strsWithComma = "100.1,23.3,34.1,11.0,70.5,6.1";
 
            double[] dbArr = Array.ConvertAll(strsWithComma.Split(','), Double.Parse);
 
            foreach (var elm in dbArr)
            {
                Console.WriteLine(elm);
                Console.WriteLine(elm.GetType());
            }
        }
    }
}
cs

 

 먼저 임의의 이동 값(translation term; Tx, Ty, Tz), 회전 값(rotation term; Rx, Ry, Rz)을 문자열로 저장하였다. 이후 Array.ConvertAll 메서드첫번째 인자로 어레이를 넣어야 한다. 변환하고자 하는 입력 파라미터(TInput[] array)로 문자열 어레이를 주어야 한다. 여기서 문자열 타입이 가지고 있는 메서드 중 하나인 Split을 사용하여 문자열 어레이로 변환한다. 이후 메서드에 다음 파라미터로 Double.Parse를 입력으로 주어 문자열 타입을 더블 타입으로 변환할 수 있게 한다.

 이후 변환된 더블 타입 어레이의 값들을 확인하기 위해 foreach 루프를 사용하여 값과 이 값의 타입을 출력하여 확인해보았다. 그 출력된 결과는 아래와 같으며, 각 값과 더블 타입을 확인할 수 있었다.

예제 코드를 통해 각 값과 타입을 출력

 

Reference

  1. stackoverflow.com/questions/9524682/fastest-way-to-convert-string-array-to-double-array
  2. docs.microsoft.com/ko-kr/dotnet/api/system.array.convertall?view=net-5.0
  3. https://www.flaticon.com/
  4. github.com/daegukdo/TIL/tree/master/02_C_sharp/018_CvtTypeArr2TypeArr
 

daegukdo/TIL

today I learned. Contribute to daegukdo/TIL development by creating an account on GitHub.

github.com

 

Flaticon, the largest database of free vector icons

Download all icons in SVG, PSD, PNG, EPS format or as webfonts

www.flaticon.com

 

Array.ConvertAll<tinput,toutput>(TInput[], Converter<tinput,toutput>) 메서드 (System)</tinput,toutput></tinput,toutput>

한 형식의 배열을 다른 형식의 배열로 변환합니다.Converts an array of one type to an array of another type.

docs.microsoft.com

 

Fastest way to convert string array to double array?

I've been having to deal lately with conversion of large string arrays to number arrays and I'm wondering what the fastest method out there for this really is. At first I adopted: double[] double...

stackoverflow.com

 

반응형