2011-07-18 20 views
8

apidoc z distinct w SeqLike mówi:Scala SeqLike odrębna zachowuje porządek?

Buduje nową sekwencję z tej sekwencji bez zduplikowanych elementów. Powraca: Nowa sekwencja, która zawiera pierwsze wystąpienie każdego elementu tej sekwencji.

Czy mam pewność, że nie udzielono gwarancji na zamówienie? Mówiąc bardziej ogólnie, czy metody SeqLike zapewniają dowolną gwarancję na zamówienie (w kolejności)?

Odpowiedz

9

Wręcz przeciwnie: operacje na Seq s gwarantują kolejność wyjściową (chyba że API mówi inaczej). Jest to jedna z podstawowych właściwości sekwencji, w której kolejność ma znaczenie, w przeciwieństwie do zbiorów, w których tylko znaczenie ma znaczenie.

+0

Więc SeqLike nie musi gwarantować, ale Seq ma? – ron

+0

Nie sądzę, że jest to technicznie poprawne. Podczas gdy sekwencje oczywiście mają porządek, nie mogłem znaleźć niczego, co wspomniałoby o zachowaniu go podczas każdej operacji. Zgadzam się, że niektórzy ludzie tego oczekują, ale nie sądzę, że implementacja, która umieszcza elementy sekwencji w "Zestawie" i zwróci je w dowolnej kolejności, naruszałaby jakąkolwiek umowę. Powiedziawszy, że uważam, że obecna implementacja zachowuje porządek. – pazabo

+0

@pazabo Prawdopodobnie masz rację, że nie ma żadnej gwarancji - ani ze specyfikacji, ani oczywiście z żadnego narzędzia, kompilatora, wykładziny itp., Ale każdemu, kto sprzeciwia się tej zasadzie, można łatwo zarzucić naruszenie zasady najmniej zaskakujące, a standardowa lib nie robi tego. –

1

To zależy od kolekcji, z której korzystałeś w pierwszej kolejności. Jeśli masz listę, dostaniesz swoje zamówienie. Jeśli z drugiej strony miałeś zestaw, to prawdopodobnie nie.

+0

Zestaw nie jest taki sam, chociaż, a PO oświadczył, że kolekcja, o której mowa, jest SeqLike –

+0

Tak, myślę, że moja odpowiedź jest bardziej ogólna ... Powinienem był wyrazić się jaśniej. – agilesteel