1

以下のように Person のオブジェクト構造があり、彼の名前に基づいて Person を検索したいと思います。

public Person{

   String name;

   List<Person> person;

}

これに対して検索方法をどのように実装できますか?

Person という 1 つのルート オブジェクトがあり、他の人などへのリンクがあります。

そして人の名前はユニークです。

検索シグネチャは

public Person findPerson(Person root, String name){

}

thisまたはthisとして見ることができます。

誰かがこれに対する他の解決策を提案できますか?

4

3 に答える 3

5

再帰が必要になります。リスト内のすべての人物を繰り返し処理し、その人物内で同じターゲットを検索します。ターゲットを見つけたら、戻ってすべての検索を停止します。

ここにいくつかの擬似コードがあります:

Person search(Person, Name)
    if (Person.Name == Name) return Person;
    for each subPerson in Person.person:
        Person found = subPerson.search(Person, Name);
        if (found != null) return found;
    return null;
于 2013-10-17T05:45:14.137 に答える
2

すべての人を訪問する必要があり、各人が保持しているすべての人を訪問する必要があります。これは、再帰アルゴリズムを使用して簡単に実装できるため、深さが優先されます。

考慮すべきことの 1 つは、名前が一意であることを知っていますか? そうでない場合は、一致する人物のリストを返す必要があります。たとえば、名前のパターン マッチを実行したい場合は、これが最も適している可能性があります。姓が「Smith」であるすべての人

于 2013-10-17T05:45:25.340 に答える
0

リフレクションを使用できます。実行時に、Person のインスタンスに Person 型の変数があるかどうかを確認し、その getter を呼び出します。コードを最小化および最適化するために再帰的に実行します。

于 2013-10-17T05:48:25.527 に答える