Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# Array.LastIndexOf() 메서드 – 배열에서 요소의 마지막 인덱스 찾기

C#의 Array.LastIndexOf() 메서드는 지정된 개체를 검색하여 1차원 배열 전체 범위에서 해당 개체가 마지막으로 나타나는 위치의 인덱스를 반환합니다. 동일한 값이 배열에 여러 번 존재할 때 첫 번째가 아닌 가장 뒤쪽 요소의 위치를 알 수 있어 중복 데이터를 다룰 때 특히 유용합니다.

찾고자 하는 요소가 배열에 존재하지 않으면 이 메서드는 -1을 반환합니다.

구문

public static int LastIndexOf (Array arr, object val);
  • arr: 검색 대상이 되는 1차원 배열입니다.
  • val: arr 안에서 찾고자 하는 개체입니다.
  • 반환값: 요소를 찾으면 해당 인덱스(정수), 찾지 못하면 -1을 반환합니다.

예제 1: 문자열 배열에서 마지막 인덱스 찾기

using System;
public class Demo {
   public static void Main() {
      string[] strArr = {"John", "Tim", "Fedric", "Gary", "Harry", "Damien", "David", "Harry"};
      Array.Sort(strArr);
      Console.WriteLine("Array elements...");
      foreach(string s in strArr) {
         Console.WriteLine(s);
      }
      Console.Write("Element Gary is at index = " + Array.BinarySearch(strArr, "Gary"));
      Console.Write("
Element Tom is at index = " + Array.BinarySearch(strArr, "Tom"));
      Console.Write("
Last index of element Harry = " + Array.LastIndexOf(strArr, "Harry"));
   }
}

실행 결과

Array elements...
Damien
David
Fedric
Gary
Harry
Harry
John
Tim
Element Gary is at index = 3
Element Tom is at index = -9
Last index of element Harry = 5

결과 해석

  • 배열을 정렬하면 "Harry"가 두 번 등장합니다(인덱스 4와 5). LastIndexOf()는 이 중 마지막 위치인 5를 반환합니다.
  • "Gary"는 정렬된 배열에서 인덱스 3에 위치합니다.
  • "Tom"은 배열에 존재하지 않으므로 BinarySearch가 음수 값(-9)을 반환하며, 이는 해당 요소가 없다는 의미입니다.

예제 2: 정수 배열에서 마지막 인덱스 찾기

using System;
public class Demo {
   public static void Main() {
      int[] intArr = {5, 10, 15, 20, 15, 25, 30};
      Array.Sort(intArr);
      Console.WriteLine("Array elements...");
      foreach(int i in intArr) {
         Console.WriteLine(i);
      }
      Console.Write("Element 20 is at index = " + Array.BinarySearch(intArr, 20));
      Console.Write("
Last index of element 15 = " + Array.LastIndexOf(intArr, 15));
      Console.Write("
Last index of element 50 = " + Array.LastIndexOf(intArr, 50));
   }
}

실행 결과

Array elements...
5
10
15
15
20
25
30
Element 20 is at index = 4
Last index of element 15 = 3
Last index of element 50 = -1

결과 해석

  • 값 15는 정렬 후 인덱스 2와 3에 중복되어 있으며, LastIndexOf()는 마지막 위치인 3을 반환합니다.
  • 값 20은 인덱스 4에서 검색됩니다.
  • 값 50은 배열에 없으므로 -1이 반환됩니다.

LastIndexOf() 사용 시 알아두면 좋은 점

  • LastIndexOf()는 배열의 끝에서부터 역방향으로 탐색하며, 배열이 정렬되어 있지 않아도 정상적으로 동작합니다. 반면 BinarySearch()는 이진 탐색 방식이므로 사전에 정렬이 필수입니다.
  • 검색 범위를 제한하고 싶다면 오버로드된 LastIndexOf(Array, Object, Int32)(시작 인덱스 지정) 또는 LastIndexOf(Array, Object, Int32, Int32)(시작 인덱스와 요소 수 지정)를 활용할 수 있습니다.
  • 반환값이 -1인지 반드시 확인한 후 인덱스를 사용해야 IndexOutOfRangeException 같은 오류를 예방할 수 있습니다.