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

Separator appearing before the first word in a list

Имам следния код:
 

char[] separators = ".,:;()[]\"'\\/!? ".ToArray();
            List<string> words = Console.ReadLine().ToLower().Split(separators).ToList();
            var shortWords = words.Where(x => x.Length < 5);
            var ordered = shortWords.OrderBy(x => x).Distinct();
            Console.WriteLine(string.Join(", ", ordered));

Подавам му следния стринг (без кавичките):
"In SoftUni you can study Java, C#, PHP and JavaScript. JAVA and c# developers graduate in 2-3 years. Go in!"
Резултатът е, че разделителят ", " се печата преди първият елемент от листа ordered. Открих, че преблемът е в OrderBy, но пак не разбирам защо се получава това.
Any ideas?

 

0
Programming Fundamentals
AntyfrizZz avatar AntyfrizZz 238 Точки
Best Answer

Здравей,

 

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

Ще се ориентирам по кода ти. Опитай да си напишеш сплита по този начин 

List<string> words = Console.ReadLine().ToLower().Split(separators, StringSplitOptions.RemoveEmptyEntries).ToList();

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

var ordered = shortWords.OrderBy(x => x).Distinct(); ще подреди резултата по азбучен ред, като махне повтарящите. Това ли трябва да стане?

 

Поздрави!

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

Да, предполагах, че нещо подобно се случва и наистина StringSplitOptions.RemoveEmptyEntries решава проблемите. Споменаха го на курса, но ми иглеждаше грозно и реших да не го запомня.
 

Линк към отделните задачи не виждам, а условията на всички могат да се свалят от тук, Strings, Dictionaries, Lambda and LINQ лекцията. Освен това проблемът бе само с интервала и сметнах, че кодът, който съм предоставил, заедно с входа, са достатъчни.

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

Може би space се възприема като дума, а не като разделител и се сортира преди останалите?

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

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

var shortWords = words.Where(x => x.Length < 5 && x.Length > 1);


Въпреки това, Judge все още дава грешка на 2 от 5 теста за тази задача: https://judge.softuni.bg/Contests/Practice/Index/174#8

0
borislav9212 avatar borislav9212 745 Точки

Здравей,

Сложи още едно условие -> .Where(w => w != ""); , където "w" е различно от празен string. Целият код.

1
AntyfrizZz avatar AntyfrizZz 238 Точки

Здравей,

 

Защо да слага това условие и листът му да е пълен с ненужни елементи, като може изобщо да не ги вкарва там?

0
borislav9212 avatar borislav9212 745 Точки

И в двата варианта работи правилно, но си прав, по-добре е със StringSplitOptions.RemoveEmptyEntries, не се бях сетил за него.

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