리스트에서 찾기: indexOf
Coddy Dart 여정의 로직 & 흐름 섹션에 포함된 레슨 — 65개 중 6번째.
특정 요소가 리스트의 어디에 위치하는지 찾아야 할 때, Dart는 indexOf() 메서드를 제공합니다. 이 메서드는 리스트를 검색하여 찾고 있는 요소가 처음으로 나타나는 인덱스 위치를 반환합니다.
indexOf() 메서드는 찾고자 하는 요소를 매개변수로 받아 정수를 반환합니다. 요소가 리스트에 존재하면 인덱스 위치(0부터 시작)를 반환합니다. 요소를 찾을 수 없으면 -1을 반환합니다.
List<String> fruits = ['apple', 'banana', 'orange', 'banana'];
int appleIndex = fruits.indexOf('apple'); // 0
int bananaIndex = fruits.indexOf('banana'); // 1 (첫 번째로 발견된 인덱스)
int grapeIndex = fruits.indexOf('grape'); // -1 (찾을 수 없음)이 메서드는 특정 위치에서 삽입이나 삭제와 같은 작업을 수행하기 전에 항목의 위치를 알아야 할 때 특히 유용합니다. indexOf()는 첫 번째로 일치하는 항목만 찾는다는 점을 기억하세요. 따라서 요소가 여러 번 나타나면 첫 번째로 나타나는 위치의 인덱스를 얻게 됩니다.
챌린지
쉬움서재 선반에서 특정 도서의 위치를 찾아 도서관 도서 검색 시스템을 관리하는 프로그램을 작성하세요. 프로그램의 요구 사항은 다음과 같습니다:
- 도서관 구역 이름을 나타내는 문자열 입력을 읽습니다.
- 선반에 있는 도서 제목들을 나타내는 여러 개의 문자열 입력을 읽습니다 (빈 문자열이 입력되면 입력을 종료합니다).
- 검색할 도서 제목을 나타내는 문자열 입력을 읽습니다.
indexOf()메서드를 사용하여 요청된 도서의 위치를 찾습니다.- 아래에 표시된 정확한 형식으로 검색 결과를 출력합니다.
예를 들어, 도서관 구역이 "Science Fiction"이고, 도서 목록이 "Dune", "Foundation", "Neuromancer", "Foundation", "Ender's Game"이며, 검색할 도서가 "Foundation"인 경우, 프로그램은 다음과 같이 출력해야 합니다:
Library Section: Science Fiction
Books on shelf: [Dune, Foundation, Neuromancer, Foundation, Ender's Game]
Searching for: Foundation
Book found at position: 1
Status: Book located successfully도서관 구역이 "Mystery"이고, 도서 목록이 "Sherlock Holmes", "Agatha Christie", "The Maltese Falcon"이며, 검색할 도서가 "Gone Girl"인 경우, 프로그램은 다음과 같이 출력해야 합니다:
Library Section: Mystery
Books on shelf: [Sherlock Holmes, Agatha Christie, The Maltese Falcon]
Searching for: Gone Girl
Book found at position: -1
Status: Book not available프로그램은 반드시 indexOf() 메서드를 사용하여 도서를 검색해야 합니다. 도서를 찾았을 때 (position >= 0), "Book located successfully"를 표시하세요. 도서를 찾지 못했을 때 (position = -1), "Book not available"를 표시하세요. indexOf()는 도서가 여러 번 나타날 경우 첫 번째로 발견된 위치를 반환한다는 점을 기억하세요.
치트 시트
리스트에서 요소의 위치를 찾으려면 indexOf()를 사용하세요:
List<String> fruits = ['apple', 'banana', 'orange', 'banana'];
int appleIndex = fruits.indexOf('apple'); // 0
int bananaIndex = fruits.indexOf('banana'); // 1 (첫 번째 발생)
int grapeIndex = fruits.indexOf('grape'); // -1 (찾지 못함)이 메서드는 요소를 찾으면 인덱스 위치(0부터 시작)를 반환하고, 요소가 존재하지 않으면 -1을 반환합니다. 중복된 요소가 있는 경우 첫 번째로 발견된 위치만 찾습니다.
직접 해보기
import 'dart:io';
void main() {
// 도서관 구역 이름 읽기
String? section = stdin.readLineSync();
// 빈 문자열이 나올 때까지 도서 제목 읽기
List<String> books = [];
String? book;
while ((book = stdin.readLineSync()) != null && book!.isNotEmpty) {
books.add(book);
}
// 검색할 도서 읽기
String? searchBook = stdin.readLineSync();
// TODO: 아래에 코드를 작성하세요
// indexOf() 메서드를 사용하여 도서의 위치를 찾으세요
// 요구된 형식으로 결과 출력
print('Library Section: $section');
print('Books on shelf: $books');
print('Searching for: $searchBook');
// 검색 결과에 따라 위치와 상태 출력
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직 & 흐름의 모든 레슨
1고급 리스트 조작
리스트 속성: first 및 last리스트 상태: isEmpty 및 isNotEmpty리스트 뒤집기리스트에 추가: insert리스트 요소 제거: removeWhere리스트에서 찾기: indexOf리스트 정렬리스트 섞기요약 - 리스트 정리 도구