文字列 (都市名) を形式 (index_in_main_list, index_in_sublist) のタプルにマッピングするハッシュ マップまたはソート ツリーをお勧めします。
ハッシュ マップの場合、これにより文字列の一定時間のルックアップが可能になり、元のリストを反復処理できます。
あなたは、都市とサブリストが旅行ルートである文字列について言及しました。都市はおそらくいくつかの移動ルートにあるため、ハッシュごとにいくつかのタプルを保持する必要があります。
たとえば、Java では、型宣言は次のようになります。
public class IndexTuple {
public final int fst;
public final int snc;
public IndexTuple(int fst, int snd) {
this.fst = fst;
this.snd = snd;
}
}
HashMap<String, ArrayList<IndexTuple>> lookupMap;
// The sublists of cities. I've used an ArrayList as example, but
// that's language and context dependent. Use arrays if the size
// won't change.
ArrayList<ArrayList<String>> cities;
リストを実行して追加するだけで、データ構造を埋めるのは非常に簡単になります。
for(int i = 0; i < cities.size(); i++) {
for(int j = 0; j < cities.get(i).size(); j++) {
String city = cities.get(i).get(j));
if(!lookupMap.containsKey(city) {
lookupMap.put(city, new ArrayList<IndexTuple>());
}
lookupMap.get(city).add(new IndexTuple(i, j));
}
}
編集:元のリストを反復処理する必要がない場合は、ハッシュ マップまたはツリーを構築した後に削除するだけでよいことに注意してください。インデックスが記憶されているため、都市が属するシーケンスを見つけることができます。反復のためにリストを再構築するのは、一種の混乱になります。