2014-04-27 3 views
1

내 응용 프로그램에서 사용자가 데이터 배열 (정렬 또는 정렬되지 않음)을 원하는 방식으로 선택할 수있게했습니다.
정렬을 선택하면 모든 것을 간단히 정렬합니다. 그 부분은 나에게 간단합니다.배열을 정렬하는 효율적인 방법 내가 직접 정렬했다

그러나 sorted를 선택한 다음 unsorted를 선택하면 데이터베이스가 내게 준 것과 동일한 순서로 데이터를 표시하려고합니다 (즉, randomize() 또는 something을 호출하지 않으려 고합니다) .
원래 배열의 복사본을 유지하지 않고 직접 정렬 한 배열을 "정렬 해제"하는 효율적인 방법이 있습니까?

+0

"데이터"란 무엇입니까? 그것은 값의 배열, 객체, HTMLCollection입니다. – RobG

+0

** unsorted **의 경우에는'Record.ID' 또는'Record.creationTimestamp'를 사용하여 정렬 할 것이라고 생각합니다. –

답변

6

당신이 할 수있는 한 가지는 데이터베이스에서 레코드를받은 원래 순서를 기록하는 각 레코드에 여분의 (숨겨진) 정수 값을 유지하는 것입니다. 사용자가 "정렬되지 않은"을 선택하면 해당 원래 순서 값을 기준으로 정렬합니다.

+0

새 필드를 추가하지 않으려면 전체 필드의 * copy * 배열도 필요하지 않습니다. "inverse-sorted"인덱스의 배열 (데이터와 함께 정렬 된 0 .. * n * 인덱스의 배열) 만 있으면됩니다. – usr2564301

+0

@ Jongware- 정렬되지 않은 인덱스를 유지하는 방법을 보여주는 코드가 있습니까? 나는 당신이 추측 한 것보다 "오직"더 많은 것이 있다고 생각합니다. :-) – RobG

+0

내 제안은 데이터베이스 인덱싱을 사용하는 것입니다 –

1

원래 컬렉션의 사본을 보관하지 않는 이유는 무엇입니까? 또는 사용자가 정렬을 요청할 때 원본 컬렉션의 정렬 된 복사본을 생성하지 않고 그대로 수정하면됩니다. 이것은 오리지널 주문 값을 유지하는 것보다 훨씬 간단합니다.

+0

1. 어레이의 다른 사본을 저장하고 싶지는 않습니다. 왜냐하면 결국 꽤 커질 수 있기 때문입니다. 2. 이것은 내가 지금하고있는 것과는 반대입니다 (사용자가 정렬되지 않았 으면 모든 데이터를 다시 요청하고 있습니다). 두 가지 모두 작동하지만 더 나은 (더 복잡한 경우) 솔루션을 찾고 있습니다. – chustar

+1

그럴 경우, 그렉의 대답은 아마 갈 길입니다. –

관련 문제