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같은 오류를 예방할 수 있습니다.