2012-04-23 5 views
0

それを返し、これが私のジレンマです: 私はこの形式で与えられた年でトップ2000名を含むファイルをインポートしている:は、配列の要素を検索し、一言で言えば

Mary, F, 2038 
Anna, F, 4230 

を(名前、性別、この年に何人がこの名前を付けられたのか)。

私はすでにこのデータで配列(型文字列)を作成しています。今、私がしなければならないことは、ユーザーが名前を検索して最高の年を返すことができるようにすることです。 例:「SAM」の 検索が

出力は次のようになります。

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

あり、これよりもプログラムにはるかにですが、私はちょうど、アレイ内を検索する方法を知っておく必要があり、どのようなI戻ります配列で見つけると、私は終わった。

+2

この宿題ですか? –

+2

データ構造の改訂を検討する必要があります。文字列の単一の配列は、物事を困難かつ遅くすることになります。 – pilotcam

+4

名前が異なっている場合、他のすべてよりも輝く1つのデータ構造があります。 – 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)時間の複雑さですか? – Venki

+1

いいえ、あなたはまだマップ全体を検索する必要があります。続いている)。あなたがこの問題を回避できるかどうかは不明です。 – Colleen

+0

私は複数の配列を検索しなければなりません。私はコピーして貼り付けて、すべての配列に対してこれを実行すれば今でも動作しますか? (私は合計で262の配列を持っていますので、より効率的な方法があれば教えてください) –

関連する問題