Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

YavorSpassov+deleted! avatar YavorSpassov+deleted! 133 Точки

Сортиране на списък от цели числа - принципен въпрос

В една от задачите, които решавах днес за списъци, се използва следният метод за сортиране:
 

sqrtNums.Sort((x,y)=>y.CompareTo(x));

Няма проблеми с кода. Работи безотказно при сортиране от по-голямо към по-малко число. Проблемът е в това, че подобен синтаксис не се помни лесно, особено ако не работиш често с него. В Гугъл също трудно намирам примери с точно този синтаксис. Какъв трябва да е подходът в случая? Трябва ли да се помни наизуст, в снипет ли да добави или има друг по-прост начин за сортиране?

Подсказката към задачата изглежда по следния начин:
 

squareNums.Sort((a, b) => b.CompareTo(a));

 

0
Programming Fundamentals
RoYaL avatar RoYaL Trainer 6849 Точки

Разбира се, че не трябва да се наизустява. Почти като всичко останало в програмирането. Трябва да знаеш защо работи.

Идеята тук, че сортиращият метод, трябва да приложи дадена функция на всяка итерация, обикаляйки числата в колекцията. И тази функция е тази, която ти му подаваш. Функцията, която му подаваш приема два аргумента и връща стойността, която ще върне CompareTo (положително, неутрално или отрицателно число). Двата аргумента, впоследствие, сортиращият метод ще ги подаде на всяка итерация като два съседни елемента в колекцията. В зависимост от връщата стойност ще прецени, къде да сложи текущият елемент.

Подаването на функцията може да се осъществи както като подаване на именована функция, така и анонимна, както си показал. Именуванията вариант на твоят е

int MySortingFuction(int a, int b)

{

    return b.CompareTo(a);

}

nums.Sort(MySortingFunction);

 

В твоят любим JavaScript също съществува подобен начин на сортиране. Даже от новия стандарт на JS вече изглежда по същия начин. До прди това изглеждаше така

nums.sort(function(a, b) { return b - a; });

 

2
YavorSpassov+deleted! avatar YavorSpassov+deleted! 133 Точки

Като го погледна, ми става ясно как работи. Проблемът е, че когато ми потрябва, може да не се сетя да го напиша точно така, тъй като синтаксисът за момента ми е чужд.

JS  не мога да кажа, че ми е любим. Даже свикнах повече със C#. Просто смятам, че ще имам по-добри шансове за работа с него в бъдеще, но да не подхващаме нова километрична тема в тази.

0
01/08/2016 00:54:06
alex1966 avatar alex1966 255 Точки

Лично на мен като ми се отдаде възможноста да пиша някакви lambdi, може би че вече посвиквам, и ми е интуитивно какво кога трябва да се подаде. Така, че смятам че след време ще изобщо няма да се замисляш.

0
RoYaL avatar RoYaL Trainer 6849 Точки

Ами не е чак толкова неинтуитивен синтаксиса. Даже бих казал, че е по-близък до математически запис на функция, от колкото нормалните C# методи. (x,y) => (2 * x) / y е почти същото като f(x,y) = 2x/y :) Разбира се е най-близко до lamdba calculus

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.