Помощ с функцията Split() в C# Programming Fundamentals Extended
Колеги, би ли могъл някой да ми разясни как се използва функцията Split() при четене на числа от конзолата. Благодаря предварително!
Колеги, би ли могъл някой да ми разясни как се използва функцията Split() при четене на числа от конзолата. Благодаря предварително!
Ако имаш string str = "1 2 3 4 5" и искаш да вземеш всяко число и да го парснеш към инт, трябва да си направиш масив от интове по следния начин: int[] numbers = str.Split(' ').Select(int.Parse).ToArray(); В случая разделителя ти е спейс, но може да имаш няколко разделителя, например запетайка и спейс. Тогава ще стане int[] numbers = str.Split(new char[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray();. Тук за да разделиш по няколко символа, в сплита трябва да си направиш масив от чарове. Може и с масив от стрингове: int[] numbers = str.Split(new string[] { ", " }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray(); А с "StringSplitOptions.RemoveEmptyEntries" си гарантираш, че ще изтриеш всички излишни празни пространства, които биха ти направили проблем.
Ако пак не ти стане ясно, дай някакъв пример за да се опитам да ти го обясня по-конкретно.
Split взима стринг примерно
string word = "1 2 3";
и го разделя по зададен char примерно по празно растояние
word.Split(' '); и връща елементите разделени в масив от стрингове.
За да го направиш на числа трябва да ползваш Select метода който взима всички елементи и ги прави нещо примерно Select(int.Parse) и връща нещо което нямам представа какво е но не е масив тъй че слагаш накрая ToArray() за да стане масив и се получава int[] arr = word.Split(' ').Select(int.Parse).ToArray(); Може и да го направиш без Select в масив от стрингове и после едно по едно с for цикъл да си ги парсваш в int масив но така е по кратко
Благодаря, обяснил си го кратко и ясно!
Самата функция Split() служи да ти нацепи някакъв стринг по зададени разделители. Разделителят (сепаратор) може да бъде само от един символ и е от тип char. Но пък можеш да си направиш масив от чарове (в самият Split или предварително) и да сплитваш едновременно по всички. Когато ползваш масив от char-ове, имаш достъп до безценната функция StringSplitOptions.RemoveEmptyEntries, за която е писал и колегата rosen.ivanov .
Тя служи да премахне от резултантния масив празните елементи, които се образуват, когато примерно имаме няколко поредни интервала (или други разделители). След това, можеш да парснеш останалите елементи от поредицата (за които знаеш, че са числа) към int с функцията .Select(int.Parse) и накрая да преобразуваш поредицата в някаква колекция, примерно масив със ToArray().
Благодаря за ясният отговор!
Колеги ако може малко помощ! не виждам къде има проблем за да дава 75/100 точки в моето решение https://pastebin.com/B7zW1rQS
Много благодаря за разяснението! Сега ще го изпробвам в задачи и ще разбера дали ми е станало ясно. Поздрави!