다음 목록이 있다고 가정 해 봅시다 : [2, 1, 4, 6, 3, 7]. 또한 어떤 목록을 정렬하는 몇 가지 방법이 있습니다. 그러나 인덱스 1, 2, & 4의 요소, 즉 하위 목록 [1, 4, 3]에서만 정렬을 수행하려고합니다. 이 하위 목록을 정렬하면 [1, 3, 4]가 생성됩니다. 인덱스 1, 2 및 4 (예 : [2, 1, 3, 6, 4, 7]) 만 정렬 할 수있는 방법은 무엇입니까?분리 된 하위 목록을 정렬하는 방법은 무엇입니까?
답변
가장 쉬운 방법은 추가 수준의 간접 지정을 사용하는 것입니다. 예를 들어, 정렬하려는 세 요소의 색인에 대한 목록 (여기서는 링크 된 목록 일 필요는없는 선형 모음을 의미 함)을 작성하고 해당 간접 계층을 비교/교환하기위한 코드를 작성하십시오. 제리 관에 의해 제안에
이것은 기본적으로 내가 생각한 것입니다. 언어가 포인터를 지원하면 원하는 요소에 대한 포인터의 배열을 만들고 포인터의 내용을 정렬 할 수 있습니다. – Argote
또는 색인을 생성하고 매핑이 단순하면 하위 목록 인덱스를 기본 배열 인덱스로 변환하는 간단한 인덱스 함수를 만들 수 있습니다. – payne
기능별 목록을 사용하는 경우 하위 목록 요소의 원래 색인을 저장 한 다음 정렬 된 하위 목록을 원본으로 다시 병합 할 수 있습니다. – comingstorm
감사합니다, 여기에 관심이있는 사람들을위한 자바 솔루션이다 :
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. LINQ를 사용하여 목록을 정렬하는 방법은 무엇입니까?
- 4. PHP에서 연결된 목록을 정렬하는 방법은 무엇입니까?
- 5. 목록 목록을 정렬하는 방법?
- 6. 데이터 바인딩 된 목록을 역순으로 정렬하는 방법
- 7. C++ 연결된 목록을 정렬하는 가장 좋은 방법은 무엇입니까?
- 8. 분리 된 스레드에서 NSUrlConnection을 실행하는 방법은 무엇입니까?
- 9. CF9에서 분리 된 객체로 작업하는 방법은 무엇입니까?
- 10. 목록을 일반적으로 정렬하는 방법
- 11. NSDictionary가 포함 된 NSArray를 정렬하는 방법은 무엇입니까?
- 12. 회전 된 텍스트를 테이블에서 정렬하는 방법은 무엇입니까?
- 13. 영구 데이터를 정렬하는 방법은 무엇입니까?
- 14. Objective-C에서 NSMutableArray 이름 목록을 사전 순으로 정렬하는 방법은 무엇입니까?
- 15. 두 가지 정렬 규칙이있는 목록을 정렬하는 방법은 무엇입니까?
- 16. 필드 중 하나를 사용하여 구조체의 연결된 목록을 정렬하는 방법은 무엇입니까?
- 17. CoreData : NSManagedObject를 기본 키로 정렬하는 방법은 무엇입니까?
- 18. mutablensarray를 정렬하는 방법은 무엇입니까?
- 19. NSMutableArray를 정렬하는 방법은 무엇입니까?
- 20. IronPython에서 FileInfo 목록을 정렬하는 방법
- 21. QTreeWidget 열을 자동으로 정렬하는 방법은 무엇입니까?
- 22. 레일에서 반환 된 레코드의 하위 집합을 분리/검색/계산하는 방법
- 23. 다른 테이블에서 관련 문자열에 따라 세미콜론으로 구분 된 ID 목록을 쿼리하고 정렬하는 가장 효율적인 방법은 무엇입니까?
- 24. 컨트롤러에서 반환 된 목록을 표시하는 방법은 무엇입니까?
- 25. BUGZILLA - 할당 된 목록을 수정하는 방법은 무엇입니까?
- 26. 내용보기가 분리 된 NSScrollView?
- 27. Java에서 영숫자를 정렬하는 방법은 무엇입니까?
- 28. ListView에서 항목을 정렬하는 방법은 무엇입니까?
- 29. sharepoint에서 SPFileCollection을 정렬하는 방법은 무엇입니까?
- 30. MDIChild를 왼쪽에 정렬하는 방법은 무엇입니까?
나는 [Rosetta Code] (http://rosettacode.org/wiki/Sort_disjoint_sublist)에서 버전을 만들었습니다. 지금까지의 답변은 J와 Python에 있습니다. – Paddy3118