Lists(혹은 List<\T>)는 같은 데이터 타입인 객체들을 하나의 저장소에 넣어 다루는 데이터 구조이다. Lists는 아래와 같은 특징이 있다.
Lists는 문자, 숫자, 시간 등 다양한 데이터 타입을 저장할 수 있고 많은 수의 엘리먼트도 넣을 수 있다. 주요하게 사용하는 메소드는 아래와 같다.
Lists에 메소드를 사용할 떄에는 Invoke Method 액티비티가 있다.Invoke Method 액티비티는 Lists 클래스에 구현된 메소드를 실행시켜주는 것이다. 주로 메소드 중 return값이 없을 때 사용한다.
array 데이터 타입은 동일한 데이터 타입인 여러 값들을 한 번에 저장할 수 있는 데이터 타입이다.(그래서 변수를 선언할 떄 array에 오는 엘리먼트들의 데이터 타입을 지정하는 것이 매우 중요함)
변수에 값을 초기화 하는 데에는 두 가지 유형이 있다. Value Type과 Reference Type이다.
Value Type : Int, Stirng, Boolean 등 하나의 값을 갖는 데이터 타입은 초기값을 넣어주지 않아도 컴파일러가 데이터 타입에 맞는 값을 알아서 지정한다. 예를 들어 int 타입은 0을, String 타입은 ""을 자동으로 할당한다.
Reference Type : Lists나 Dictionary 같은 데이이터 타입은 초기화 할 때 객체화를 해주어야 한다.(new List()
해줄 때 ()를 붙이는 것이 객체화) Reference Type 변수는 변수를 만들 때 객체화를 해준 후 값을 추가해 주어야 한다.
위 내용을 참고해 Refenrence Type 변수를 만들 때는 아래와 같이 사용한다.(List를 예로)
Lists 변수 선언
System.Colleciton.Generic.List\ 타입으로 리스트 변수를 선언하는데, 엘리먼트의 타입을 T에 지정하기
값 초기화
Lists를 초기화 하는 방법은 new List(of String) from {"A", "B", "C"}
와 같이 하면 된다.(리스트만 만들고 싶을 때에는 from절을 쓰지 말고 이후에 Add to Colleciton 액티비티에서 값 추가하기)
UIPath에서는 Collection을 다루는 액티비티들이 있다.
액티비티 | 설명 |
---|---|
Add to Collenction | Collection에 엘리먼트를 추가함, 이 액티비티는 List.Add() 메소드와 동일한 동작을 함 |
Remove From Collection | Collection에서 특정한 엘리먼트를 제거하고 동작 수행 여부를 Boolean 타입으로 반환함 |
Exists in Colleciton | 어떤 값이 Colleciton 내에 있는지 확인하고 Boolean 값으로 결과 반환 |
Clear Collection | Collection 안에 있는 모든 엘리먼트를 삭제함 |
Dictionaries(혹은 Dictionary\<TKey, TValue>)는 key와 value가 쌍으로 이루어진 collection이다.(key는 유니크함) Key와 Value의 데이터 타입은 Dictionary가 선언될 때 선택된다.
다행히도 Dictionary를 사용하는 방법은 python과 동일하다.(엘리먼트를 추가하고, value에 접근하는 방법, key들을 가져오는 방법 등)
Dictionary는 Reference type이기 때문에 초기화를 할 때 위에서 이야기한 특정한 방법을 사용해야한다. key value 모두 데이터 타입을 지정해준다.(예를 들어 key와 value 모두 string)
new Dictionary(of Stirng, String)
당연하게도 value에는 List가 들어올 수도 있다. 이 때는 초기화를 어떻게 할까?
new Dictionaru(of Stirng, List(of String))
이렇게 해주면 된다.
Dictionary에서 주요하게 사용되는 메소드는 아래와 같다.
메소드 | 설명 | 예시 |
---|---|---|
Add() | key와 value를 쌍으로 하나 추가, return 값이 없기 때문에 Invoke Method 액티비티에 사용 | VariableName.Add(Key, Value) |
Remove() | key를 입력받아서 dictionary에서 제거, Assign 액티비티에서 사용 가능 | VariableName.Remove(key) |
Item() | Dictionary에서 key에 해당하는 아이템을 반환 | VariableName.Item(key) |
Count | 아이템 개수를 int32로 반환 | VariableName.Count |
ContainsKey() | key가 존재하는지 확인, Boolean으로 결과 반환 | VariableName.ContainsKey(key) |
TryGetValue() | 주어진 key와 맞는 아이템이 있는지 확인하고 Boolean으로 결과 반환 | VariableName.TryGetValue(key, value) |
리스트 {"Germany", "Spain", "Japan", "Brazil", "India", "China"}가 있다. 이 리스트를 내림차순으로 정렬하고 3 개의 국가만 새로운 리스트에 담아 출력하라
변수 설정
CountryList 정렬
Invoke Method를 두 번 써서 내림차순 정렬을 해준다.(Sort는 오름차순을 기준으로 정렬하는 것이고, Reverse로 그 순서를 뒤집어줌)
3개의 엘리먼트 슬라이싱
List에는 GetRange() 메소드가 있다. 이 메소드는 슬라이싱을 지원하는 메소드이다. 아래와 같이 쓴다.
출력
String.Join()을 사용해서 한 줄로 출력한다.
다른 부분은 방법 1과 같은데, 슬라이싱 하는 방법만 조금 다르다.
위 내용은 이 링크를 참조하기 바란다.
아래와 같이 {년도 : 우승자}으로 짝지어있는 원본 데이터가 있다. 이 데이터를 활용하여 "우승자 - 우승 횟수 x회"와 같이 출력하라
{2006,"Oscar Pereiro"},{2007,"Alberto Contador"}, {2008, "Carlos Sastre"}, {2009,"Alberto Contador"}, {2010, "Andy Schleck"}, {2011, "Cadel Evans"}, {2012,"Bradley Wiggins"}, {2013,"Chris Froome"}, {2014,"Vincenzo Nibali"},{2015,"Chris Froome"},{2016,"Chris Froome"},{2017,"Chris Froome"}, {2018,"Geraint Thomas"}
변수 설정
원본 데이터는 dict_RawData에 넣어두고 처리를 거친 데이터는 dict_Result에 넣는다.
RawData 반복 & Result에 key 확인
RawData에 For Each를 돈다. 각 반복마다 Result에 우승자가 key에 있는지 확인한다.
분기 처리
만약 이번 반복의 우승자가 Result에 이미 key로 존재한다면, value에 1을 더해주고, key로 존재하지 않는다면 value에 1을 지정해 dictionary에 추가한다.
출력
이렇게 만들어진 Result를 엘리먼트 하나씩 돌면서 출력한다.