LINQ, експлоатация и orderby orderbydescending

поръчване на операции позволяват да се изгради входните последователности в определен ред. Важно е, че и OrderBy и изискват въвеждане OrderByDescending IEnumerable тип секвенция и тип връщане последователност IOrderedEnumerable. Предава операции и OrderBy OrderByDescending като вход последователност IOrderedEnumerable това е невъзможно. Причината е, че следващите разговори с операции и OrderBy OrderByDescending не вземат под внимание реда, създадена от предишна покана за OrderBy и OrderByDescending. Това означава, че последователността на трансфер, връщането на OrderBy или OrderByDescending в последващ наричаме OrderBy или операция OrderByDescending няма смисъл.

Ако се изисква по-висока степен на поръчки, отколкото може да се постигне само с едно обаждане или сделка OrderBy OrderByDescending, е необходимо последователно да предизвика операция или ThenBy ThenByDescending, което ще бъде споменато в следната статия.

Операция OrderBy ви позволява да организирате входната последователност на базата на метода keySelector. който връща ключова ценност за всеки вход елемент. Подреден изходна последователност IOrderedEnumerable издадени във възходящ ред въз основа на стойностите, върнати от ключовете.

Сортиране изпълнен OrderBy операция определя като нестабилна. Това означава, че тя не се запази реда на входните елементи. Ако два входа елемент, получена в експлоатация OrderBy в ред и основните ценности на тези два елемента са едни и същи, тяхното положение в изходната последователност може да остане непроменено или промяна, нито едното, нито другото не е гарантирано. Дори ако всичко изглежда наред, тъй като поръчката се определя като нестабилен, винаги трябва да се изхожда от това. Това означава, че никога не трябва да се разчита на реда на елементи, идващи от операциите или OrderBy OrderByDescending, за всяка област, различна от тази на викането на метода. Съхраняване на всяка поръчка, която съществува в последователност предава от всяка от тези операции не могат да бъдат гарантирани.

Операция OrderBy има два прототипа описани по-долу:

Първият прототип OrderBy

В тази предварителна работа изкуство OrderBy предава като източник на входа последователност и начин делегат keySelector и връща обект, който, когато прехвърлянето се източник за събиране на място вход, събиране на всички елементи и прехвърляне на всеки метод keySelector, премахвайки по този начин всеки ключ и поръчване последователност въз основа на тези ключове ,

Метод keySelector получава входен елемент тип T и връща поле вътре в клетката, която се използва като ключов K тип стойност за този вход елемент. Видовете R и Т могат да бъдат еднакви или различни. Видът на стойност, върната от keySelector, трябва да приложи IComparable интерфейс.

втори прототип OrderBy на

Този прототип е същата като първата, с изключение на това, че позволява да се премине на обект за сравнение. Ако използвате тази версия на операция OrderBy, че не е необходимо да въвеждате K изпълнява IComparable интерфейс.

Следният код показва пример за свикване на първия прототип:

Кодът в този пример, машината регулира дължината на списъка с имената им. Резултатът е, както следва:

LINQ, експлоатация и orderby orderbydescending

Сега ние тестваме примера на втория прототип използвайки собствените сравнение. Преди да ви покажа кода, то е необходимо да се разгледа интерфейса IComparer.

IComparer интерфейс изисква прилагането на един единствен метод, наречен сравнение. Този метод отнема два аргумента на вътрешна и същи вид и връща стойност по-голяма от нула, ако първият аргумент е по-голям от втория, нула - ако еквивалентните аргументите и на стойност по-малка от нула - ако първият аргумент е по-малък от втория. Забележете как в този интерфейс и полезно обобщение прототип C #.

В този пример, за по-голяма яснота, за сравнение, не се използва по подразбиране. Просто се създаде клас, който реализира интерфейса IComparer, която подрежда елементите на базата на съотношението на гласни и съгласни:

Този клас съдържа два метода - Сравнете и GetVowelConstantCount. Сравнете метод изисква IComparer интерфейс. метод GetVowelConstantCount е необходимо за вътрешно ползване Сравнете и позволява да се получи броят на гласни и съгласни в входния низ. Също така трябва да бъде в състояние да предизвика същата логика извън метода сравнение, така че можете да получите стойностите, които да се показва, когато контур чрез подредена последователност.

Какво точно прави сравнение - не е толкова важно. Това е много малко вероятно, че някога ще трябва да се определи съотношението на гласни и съгласни в един ред, а дори и по-малко вероятно, че е необходимо да се сравнят две струни на базата на това съотношение. По-важното е, като клас е създаден, който реализира интерфейса IComparer чрез прилагането на метода сравнение. Тук можете да наблюдавате общо изпълнение на сравнение на метода в случай / друг блок в края на метода. Както можете да видите, този код блок връща -1, 1 или O, която изисква договор IComparer интерфейс.

Сега можете да използвате този код:

Преди да се обадите OrderBy създава инстанция на сравнителната. Един пример може да бъде създадена в метода на OrderBy разговор, но след това не успя да се отнасят към него в един foreach цикъл. Следващият пример показва резултатите от писта:

LINQ, експлоатация и orderby orderbydescending

Както можете да видите, елементите с по-малък коефициент на гласните и съгласните се показват на челно място.

OrderByDescending

Тази операция прототипи и се държи като операция OrderBy, но с тази разлика, че се спускат заповеди. По-долу е пример за операцията:

Както можете да видите, имената на машини са подредени в низходящ ред:

LINQ, експлоатация и orderby orderbydescending