2015-05-25 10 views
20

Poza rodzimym sposobem klonowania tablicy, a następnie sortowania jej na miejscu, czy istnieje algorytm i istniejąca implementacja, która jest bardziej odpowiednia do sortowania nieniszczącego?funkcjonalny nieniszczący układ tablicowy

Konieczne posortowanie tablicy elementów pływających w nowej tablicy bez zmiany źródła. Moje wyniki wyszukiwania były dość cienkie, ponieważ większość literatury koncentruje się na zmniejszeniu wymagań dotyczących pamięci przy sortowaniu na miejscu.

Korzystanie z macierzystego sorted = [].slice().sort() działa dobrze. To pytanie dotyczy zrozumienia, czy istnieją inne wydajne implementacje sortowania, gdy ograniczenia pamięci są usuwane, ponieważ i tak potrzebna jest nowa tablica.

+0

"? Czy istnieje jakiś istniejący funkcjonalny realizacja sortowania dostępnych" --- Jak o '[] .slice() .sort() '? – zerkms

+0

Nie ma preferowanego algorytmu. To zależy od tego, jak chcesz go użyć. Poszedłbym z '.slice(). Sort()'. – Ryan

+0

Nie rozumiem twojego pytania. Jedynym rodzimym * sortem jest 'Array.prototype.sort', który, jak wiadomo, mutuje tablicę. Kanonicznym sposobem uczynienia go niezmiennym jest użycie '.slice(). Sort()'. Czy masz jakieś problemy z tym podejściem? Jeśli tak, dlaczego i czego dokładnie szukasz? –

Odpowiedz

19

Ponieważ komentarze nie powtarza się kilka razy.

  1. .slice() sort() jest domyślnym sposobem.
  2. Nie jest jasne, w jaki sposób moglibyśmy uzyskać lepszy algorytm/metodę z wykorzystaniem bibliotek, o których wspomniałeś.

Widzenie motywacji do nieniszczącego sortowania wiąże się z pisaniem funkcjonalnego kodu, a patrzysz na Ramdę ... sprawdź bibliotekę ImmutableJS Facebooka, jeśli jeszcze tego nie zrobiłeś.

W szczególności, Seq. Możesz zacząć przechowywać tablicę obiektów pływających w pliku Seq, posortuj ją i upewnij się, że oryginalny znak Seq pozostaje we właściwej kolejności. Ponadto wykorzystuje ocenę Lazy. http://facebook.github.io/immutable-js/docs/#/Seq
http://facebook.github.io/immutable-js/docs/#/Seq/sortBy

+0

Dzięki. Spojrzałem na kod źródłowy * immutable-js *, a także używa "rodzimego sortowania klonu", tak jak * podkreślenie *, * lodash * i * ramda *. Ponieważ literatura algorytmu jest dość skupiona na sortowaniu na miejscu, aby zmniejszyć wymagania dotyczące pamięci, pomyślałem, że usunięcie tego ograniczenia zmieniłoby sytuację. Wszystkie dotychczasowe opinie sugerują, że nie. – Hurelu

7

Jest prostsza składnia niezmiennie sortowania tablicę używając ES6 spread operatora:

[...array].sort(sortFn) 
+0

'[... arr]' jest takie samo jak 'arr.slice()' – Hurelu

Powiązane problemy