私は次のリストを持っているとしましょう:[2,1,4,6,3,7]。私はまた、任意のリストをソートするいくつかのメソッドを持っています。しかし、インデックス1,2、& 4、すなわちサブリスト[1,4,3]の要素だけで並べ替えを実行したい。このサブリストを並べ替えると、[1,3,4]が生成されます。どのようにして元のリストを得ることができますか?つまり、インデックス1,2、および4、つまり[2,1,3,6,4,7]を並べ替えるだけですか?分割されたサブリストを並べ替えるにはどうすればいいですか?
答えて
最も簡単な方法は、余分なレベルの間接指定を使用することです。たとえば、並べ替える3つの要素のインデックスのリスト(ここでは、リンクされたリストではない、リニアコレクションのみを意味する)を作成し、そのインダイレクションのレイヤーを比較/スワップするコードを作成します。ジェリー棺の提案に
これは基本的に私が考えていたことです。あなたの言語がポインタをサポートしていれば、必要な要素へのポインタの配列を作成し、ポインタの内容をソートすることができます。 – Argote
また、索引付けをしていてマッピングが簡単な場合は、サブリスト索引を基本配列索引に変換する簡単な索引機能を作成できます。 – payne
機能的な種類のリストを使用する場合は、サブリストの要素の元のインデックスを保存してから、ソートされたサブリストを元のものにマージすることができます。 – comingstorm
おかげで、ここに興味がある人のためのJavaでのソリューションです:
import java.util.List;
import java.util.AbstractList;
import java.util.Arrays;
public class ExtendedSubList<E> extends AbstractList<E>
{
protected final List<E> parent;
protected final int[] indices;
public static <E> List<E> subList(final List<E> parent, int ... indices)
{
if (parent == null)
throw new IllegalArgumentException("parent == null");
if (indices == null)
throw new IllegalArgumentException("indices == null");
for (int i = 0; i < indices.length; i++)
if (!(0 <= indices[i] && indices[i] < parent.size()))
throw new IllegalArgumentException(String.format("index %d (at position %d) is not in bounds", indices[i], i));
Arrays.sort(indices);
return new ExtendedSubList(parent, indices);
}
protected ExtendedSubList(List<E> parent, int[] indices)
{
this.parent = parent;
this.indices = indices;
}
public E get(int index)
{
return parent.get(indices[index]);
}
public int size()
{
return indices.length;
}
public E set(int index, E element)
{
return parent.set(indices[index], element);
}
}
使用例:
List<Integer> list = Arrays.asList(2, 1, 4, 6, 3, 7);
Collections.sort(ExtendedSubList.subList(list), 1, 2, 4);
結果のリストが生成します:[2, 1, 3, 6, 4, 7]
。
私は別の答えとしてではなく、あなたの質問(その後)の編集としてこれを投稿したいと思います。ああ、彼の答えを受け入れる。 – Argote
次のPythonコードはジョブを実行します。間接的にソートするのではなく、Jerry Coffinsの答えを受け入れる方法と異なる場合があります。これは、値を抽出し、ソートしてから挿入します。
data = [7, 6, 5, 4, 3, 2, 1, 0]
indices = sorted([1,2,4])
values = [data[i] for i in indices] # [6, 5, 3]
values.sort() # [3, 5, 6]
for index, value in zip(indices, values):
data[index] = value
print (data) # [7, 3, 5, 4, 6, 2, 1, 0]
- 元のインデックスが動作するもののために ソートする必要があります。
対応する値は、 である。
値がソートされます。
forループはソートされた値 を元の配列に戻します。
- 1. ネストされた行を入れ子レベルで並べ替えるにはどうすればよいですか?
- 2. サブリストをクラスで並べ替える
- 3. ページ分けされたリストを長さで並べ替え、RoRアプリケーションでアルファベット順に並べ替えます
- 4. 選択した列を並べ替えるにはどうすればいいですか?
- 5. woocommerceで古い注文の並べ替えを検出するにはどうすればいいですか?
- 6. グループ化されたデータを並べ替えて分析する
- 7. 木場のフィールドで並べ替えを有効にするにはどうすればいいですか?
- 8. Arraylist内のオブジェクトをプロパティに基づいて並べ替えるにはどうすればいいですか?
- 9. 距離に最も近いユーザーのリストを並べ替えるにはどうすればいいですか?
- 10. 関連するプロパティによってフェッチリクエストを並べ替えるにはどうすればいいですか?
- 11. 並べ替えコントロールを表示せずにuitableviewcellを並べ替えるにはどうすればいいですか?
- 12. 色分けされたセルでデータを並べ替える
- 13. Railsモデルを配列にしないで並べ替えるにはどうすればよいですか?
- 14. デバッグ中にページ要素をZ-インデックスで並べ替えるにはどうすればいいですか?
- 15. 他のリストの並べ替え順にスカラオブジェクトのリストを並べ替えるにはどうすればいいですか?
- 16. タブレット/モバイルデバイスでこれらの列を並べ替えるにはどうすればよいですか?
- 17. Rubyで配列を特定の順序で並べ替えるにはどうすればいいですか?
- 18. Scalaでクエリ文字列コンポーネントをバイト順で並べ替えるにはどうすればいいですか?
- 19. 行を互いに接続し、アルファベット順に並べ替えるにはどうすればよいですか?
- 20. リスト内のサブリストの並べ替え
- 21. さまざまな時間の配列を並べ替えるにはどうすればよいですか?
- 22. さまざまなクラスの配列を並べ替えるにはどうすればよいですか?
- 23. 注文を何回か並べ替えるにはどうすればいいですか?
- 24. 配列を文字列長で並べ替え、次にPHPで値を並べ替えるにはどうすればよいですか?
- 25. Dartで文字列のリストを並べ替えるにはどうすればいいですか?
- 26. 投稿を日付と時間で並べ替えるにはどうすればいいですか?
- 27. 他の人のウェブページで結果を並べ替えるにはどうすればいいですか?
- 28. ペアのベクトルを最初の要素で並べ替えるにはどうすればいいですか?
- 29. Windows 8.1アプリケーションでXAMLグリッドビューを並べ替えるにはどうすればいいですか?
- 30. Laravelで雄弁なオブジェクトのコレクションを並べ替えるにはどうすればいいですか?
[Rosetta Code](http://rosettacode.org/wiki/Sort_disjoint_sublist)でバージョンが問題になりました。これまでの回答は(早いですが)JとPythonにあります。 – Paddy3118