[C#] Домашно Multidimensional Arrays - 5 задача


8
Здравейте! Потърсих тема за тази 5 задача и тъй като не открих реших аз да я започна.
Ето условието:
"Даден ви е масив от тип string. Да се напише метод, който да сортира елементите на масива според дължината им (броят на символите, съдържащи се в съответния string)."
Ето моето решение:
http://pastebin.com/WjwqF7NZ
Това което съм направил е да използвам статичния метод Array.Sort с конкретния overload, който ми позволява като първа променлива да използвам масива, а като втора да дам критерии за сравнение (например клас имплементиращ интерфейса IComperer).
Съответно съм си дефинирал клас StringComparer, който наследява IComperer, което се записва class StringComparer : IComperer.
За да имплементирам IComperer моят клас трябва да съдържа метод Compare(object a, object b), който да ми задава точния критерии по който ще се сравняват двата обекта a и b. В моя случай Compare метода прави следното - ако са различни дължините на двата стринга, той връща стойност от сравнението на двете целочислени дължини. Ако са равни дължините, той връща стойност от лексикографското сравнение на двата стринга.
И така. В началото въвеждам броя на елементите в масива. След това въвеждам самите елементи. След това ги сортирам, изполвайки гореописания метод. И накрая отпечатвам вече сортирания масив.
Надявам се да съм бил полезен с обяснението. Ако все пак е останало нещо неясно ще се радвам да отговарям на въпроси! :)
Поздрави!
Деян



Отговори



0
Не знам дали аз не бъркам нещо, защото това изглежда ПРЕКАЛЕНО лесно. Моля, ако аз съм в грешка някъде да кажете :) - http://pastebin.com/kVX3iqy9

от agentzero (0 точки)


0
Иска се самото сортиране да бъде отделено в метод написан от теб, а не да се използва готов. Също така опитай следното: string[] stringArray = { "aaaa", "b", "aaaaaaaaaaaaaaa", "aaaaaaaaaa", "aa" };
По условие се иска да ги сортираш по дължина на стринговете, а не по азбучен ред. Твоят код ще извече накрая "b".
Цитат от условието: "Write a method that sorts the array by the LENGTH of its elements (the number of characters composing them)."
Реших задачата използвайки QuickSort от миналото домашно. Също така открих нещо ново "KeyValuePair


0
разбрах ! 10х

от agentzero (0 точки)


0

GitHub

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


от dzhenko (3893 точки)


0

Решения: http://pastebin.com/9CpNaBqx

Както други са се сетили и аз използвам Array.Sort за подредбата.

Накратно правя си масив от стрингове(ненареден) и го хвърлям към метода за сортиране.В него взимам броя на елементите и правя нов числов масив с големина броя на елементите от стринговия масив.Въртя фор цикъл и пълня новия масив със дължините на всеки елемент от стринговият масив.

***Има се в предвид че индексите на стринг и броя елементи на стринга съвпадат.

Викаме Array.Sort метода, като му предаваме 2 параметъра - първият е с дължините а втория със самите стрингове.Сортира се извършва като двойка,но реално сортирането е в първия масив със дължините като при сортирането му прави аналогично сортиране по индексите на стринговият масив(реално той не се сортира а просто се копират разместванията от първия масив).Надявам се го обясних както трябва за да го разбере и някой друг :D


от tvarbanov (15 точки)


4
Какво ще кажете за това решение? Става ли така или се бъркам!?!?
http://pastebin.com/GCWTthkr

от DinkoK (159 точки)


1

Ето и от мен едно авторско решение !Мисля че е максимално опростено.

http://pastebin.com/39ksjP07


от Mart1n_Vatev (143 точки)


2

Чудя се дали това решение изпълнява условието?


от nina75 (60 точки)


0
Дали изпълнява условието – ако четем буква по буква, трябва да напишеш метод, който сам по себе си да сортира, а такъв реално нямаш. Но решението ти е доста интересно и надхвърля това, което се очаква като знания (имаш клас, интерфейс, метод..). Не се бях ровил в IComparer

от varbanoff (2325 точки)

0
Първо го бях направила така: http://pastebin.com/j1WAsgay със Selection Sort за по-лесно :) . Обаче после, като прегледах пак презентацията, реших че темата Sorting with IComparer

от nina75 (60 точки)


0
При следния код къде е грешката.
Защо двете най-дълги думи ми излизат най-горе ,а останалите се сортират по дължина.
http://pastebin.com/UG200dVy

от TodorDimitrov (757 точки)


0
class StrComparer : IComparer

от flame78 (257 точки)