심재운 블로그



일반적인 .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 심재운

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band

본문과 관련 있는 내용으로 댓글을 남겨주시면 감사하겠습니다.

비밀글모드

  1. Favicon of https://ssogarif.tistory.com BlogIcon 정보쟁이's 2009.11.16 18:28 신고

    유용한 정보 잘~ 보았습니다^^
    그런데 RemoveAtt 의리턴타입이 void 인데
    string Element = ArrayShimex.RemoveAt<string> (1, ref strArray); 부분이 에러가 나네요
    string 타입으로 주려면 위의 소스에서 어떻게 고쳐야 할까요?

    • Favicon of https://aspdotnet.tistory.com BlogIcon 재우니 2009.11.24 02:07 신고

      string[] strArrays = new string[] { "a", "b", "c" };
      // remove element b
      ArrayEx.RemoveAt<string>(1, ref strArrays);

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