0

私は Mapとを持っていListます。キー値Listに基づいてソートする必要があります。Map例えば:

Map = (<2,"Andy">,<4,"Karl">)
List = ("Kathy","Andy","Yiri","Jun","Karl")

インデックス : (2 : Andy) が存在し、インデックス (4 : Karl) が存在するように、リストを並べ替える必要があります。要素の残りの順序は重要ではありません。残りの条件は次のとおりです。

  1. Map のエントリは List に存在する場合と存在しない場合があります ;(この場合、順序を同じに保つことができます)
  2. リストが空である可能性があります
  3. 地図が空である可能性があります

私はこれを 2 つのループで行うことができます。1 つのループでこれを達成できるかどうか知りたいと思っていました。

4

1 に答える 1

0

1 ループを使用してマップ内のすべてのキーをループし、 でリスト内のオブジェクトを検索してから、 2 回indexOf(Object)使用setしてオブジェクトを正しい位置にスワップできます。

疑似コード (Java のように見えます):

Set<Map.Entry<Integer, String>> entrySet = map.entrySet();
for (Map.Entry<Integer, String> e: entrySet) {
    int index;
    if ((index = list.indexOf(e.getValue())) >= 0 && index != e.getKey()) {
        list.set(index, list.set(e.getKey(), e.getValue()));
    }
}

まあ、複雑さはそれほど良くありません: O(nk) ここで、n は List 内の要素の数、k は Map 内の要素の数です。

于 2012-06-12T02:07:22.903 に答える