2012-04-23 2 views
0

반환이 나의 딜레마는 다음과 같습니다 나는이 형식으로 주어진 년에서 최고 2000 명을 포함하는 파일 가져온 :배열의 요소에 대해 검색하고, 그것을 간단히 말해서

Mary, F, 2038 
Anna, F, 4230 

을 (이름, 성별,이 특별한 해에 얼마나 많은 사람들이 지명되었는지).

이 데이터로 배열 (유형 문자열)을 이미 만들었습니다. 이제 내가해야 할 일은 사용자가 이름을 검색하고 가장 좋은 해를 반환 할 수있게하는 것입니다. 예는 "샘"에 대한 검색

출력해야한다 : 이것보다 프로그램에 더 많은있다

"isamar 1990" 
"rosamond 1910" 
"sam 1900" 
"samantha 1990" 
"samara 2000" 

,하지만 난 그냥 배열 내에서 검색하는 방법을 알 필요가 무엇을 반환 I 배열에서 찾으십시오, 그리고 끝났습니다.

+2

이 숙제입니까? –

+2

데이터 구조를 수정해야합니다. 하나의 문자열 배열은 작업을 어렵게하고 느리게 만듭니다. – pilotcam

+4

이름이 다른 경우 다른 모든 것을 더 빛나게하는 하나의 데이터 구조가 있습니다. – Venki

답변

5

배열을 검색하는 것은 반복 할 수 있으며 각 요소를 원하는 용어와 비교하는 것처럼 간단 할 수 있습니다.

public static CommonName[] loadedNames = /* ... */; 
public static Collection<CommonName> search(String searchTerm) { 
    Collection<CommonName> matches = new ArrayList<CommonName>(); 
    for (CommonName cn : loadedNames) { 
    if (cn.name.indexOf(searchTerm) >= 0) { matches.add(cn); } 
    } 
    return matches; 
} 
: 당신이 그들을 String#indexOf(String) method 등을 사용하여 검색 할 수있는 것보다 이미 loadedNames 이러한 객체의 배열로 파일을로드했다고 가정

public class CommonName { 
    public final String name; 
    public final int year; 
    public final CommonName(String name, int year) { 
    this.name = name; 
    this.year = year; 
    } 
} 

: 예를 들어, 다음과 같은 모델을 가지고 가정

물론 대소 문자 구분 및 성능 (배열 검색은 O(n))과 같은 다른 문제가 있습니다.

+1

지도를 사용하여 ans를 좋아합니다. O (1) Time complexity? – Venki

+1

아니요, 전체지도를 검색해야합니다. 여전히). 이 문제를 해결할 수 있는지 확실하지 않습니다. – Colleen

+0

참고로, 여러 배열을 검색해야하는데, 각 배열은 주어진 해에 대해 남성과 여성 이름을 배열합니다. 모든 배열에 대해 복사하여 붙여 넣기를 수행하면 여전히 작동합니까? (나는 총 262 개의 배열을 가지고 있으므로 좀 더 효율적인 방법이 있다면 알려주십시오.) –

관련 문제