Programming/.NET

System.Collections.ArrayList를 사용하면 object형및 그와 호환가능한 모든 타입을 배열로 처리할 수 있습니다. 단순 배열이라면

 

string[] s = new string[10];

 

위와 같은경우 문자열만 담을 수 있지만 ArrayList는

 

System.Collections.ArrayList al = new System.Collections.ArrayList();
al.Add("abc");
al.Add(123);
al.Add(true);

 

예제와 같은 형태의 처리가 가능합니다. 다만 요소에 따라 박싱(Boxing)이 발생할 수 있기에 성능면에서는 약점이 있습니다.

 

또한 배열은 처음부터 크기가 정해져 있으나 ArrayList에서는 Add메서드를 호출하여 추가하는만큼 유동적으로 크기가 늘어날 수 있습니다. 물론 배열에서도 s = new string[20] 처럼 할 수는 있으나 기존 값을 유지하지는 못합니다.

 

ArrayList에서 요소삭제는 Remove() 메서드를 사용합니다.

 

al.Remove(123);

 

정렬은 Sort 메서드에서 수행할 수 있습니다.

 

al.Sort();

 

다만 Sort는 ArrayList의 내부요소가 모두 같은 타입이어야만 가능합니다. 그렇지 않은 상태면 예외가 발생합니다.

 

정렬하고자 하는 타입이 사용자 정의 형식이라면 IComparer 인터페이스를 구현해 Sort를 호출할때 인자로 전달하거나 정의형식을 만들때 IComparable을 상속하여 내부적으로 정렬메서드를 구현하면 됩니다.

 

public class Employee : IComparable
{
    public Employee()
    { }
    public Employee(string name, string department, int age)
    {
        Name = name;
        Department = department;
        Age = age;
    }

    public string Name
    {
        get;
        set;
    }

    public string Department
    {
        get;
        set;
    }

    public int Age
    {
        get;
        set;
    }

    public int CompareTo(object o)
    {
        Employee e = (Employee)o;

        if (this.Age > e.Age)
            return 1;
        else if (this.Age < e.Age)
            return -1;
        else
            return 0;
    }
}

 

IComparable을 상속하면 CompareTo메서드를 반드시 구현해야 하며 해당 메서드 안에서 어떤 기준으로 요소를 정렬할지에 대한 조건과 그 조건에 해당하는 반환값을 가지도록 하면 됩니다.

 

System.Collections.ArrayList al = new System.Collections.ArrayList();
al.Add(new Employee("hong", "it", 30));
al.Add(new Employee("choi", "it", 27));
al.Add(new Employee("kim", "it", 42));
al.Sort();

foreach (Employee e in al)
    Console.WriteLine(e.Age);

 

'Programming > .NET' 카테고리의 다른 글

[C#] LINQ  (0) 2017.12.05
[C#] 문자열 보간 ($)  (0) 2017.11.28
[C#] ArrayList  (0) 2017.11.14
[C#] 선택적 매개변수  (0) 2017.11.07
[C#] Task  (0) 2017.11.01
[C#] BigInteger  (0) 2017.10.24
0 0