재우니의 블로그



일반적인 .NET FRAMEWORK 2.0 는 배열에 대해 약간의 GENERIC 함수들을 제공해 줍니다. 
그러나 이 함수 이외에 코드에서 배열의 요소들을 합치거나 제거하는 기술을 구현할 때가 종종 있죠. 

따라서 이러한 기술을 구현하기 위해서 우선적으로 GENERIC 클래스에 대한 기본지식을 가지고 있어야 합니다.
즉 Lists, Arrays 이외 말이죠. 이러한 Array 객체들은 다소의 유용한 GENERIC 함수들을 아래와 같이 포함하고 있습니다.

  • ConvertAll<T,O>
  • Exists<T>
  • Find<T>
  • Resize<T>
  • TrueForAll<T>

하지만 이러한 함수들은 때때로 작업을 하는데 전부 만족스럽지 않아서, 약간의 확장을 하여 사용합니다.




Append 제네릭 함수는 Array 제네릭의 Resize 메소드를 이용하여 공간을 재조정하며, 추가된 요소값을 담습니다.

RemoveAt 제네릭 함수는 특정 위치의 요소값을 제거하고 Resize 메소드를 이용하여 재조정합니다.

RemoveAll 제네릭 함수는 RemoveAt 함수를 이용하여 배열 개수만큼 전부 삭제하며 삭제한 카운트를 반환합니다.



그러면 위의 함수를 가지고 어떻게 사용하는지에 대해 설명해 보겠습니다.



1. Append 이용하기

string[] strArray = new string[] { "a", "b", "c" }; string[] strArray2 = new string[] { "d", "e", "f" };

//첫번째 array 에 d, e, f 추가하기 ArrayShimEx.Append<string>(ref strArray, strArray2);

//하나의 요소인 g 추가하기
ArrayShimEx.Append<string>(ref strArray, "g");

Console.Write(string.Join(strArray));


2. RemoveAt 이용하기

string[] strArray = new string[] { "a", "b", "c" };
// element b 요소 제거하기, 1번째임
ArrayShimEx.RemoveAt<string>(1,ref strArray);

foreach (string str in strArrays)
{
       Response.Write(str);
}



3. RemoveAll 이용하기

// string 배열에 담는다.
string[] strArray = "나의 이름은 심재운 이다. very Good!!".Split(' ');

int RemoveCount = ArrayShimEx.RemoveAll<string>(ref strArray, new Predicate<string>(
    delegate(string element)
    {
        // "심재운" 값이 존재한 요소는 전부 삭제
        return element.Contains("심재운");
    }
));



위의 코드를 C# 3.0 에서 제공해 주는 
Extension Methods 로 색다르게 함수를 만들 수도 있습니다.




감사합니다. - posted by 심재운