Жолбюрмен салынған жолдан соңғы таңбаны жоюдың ең жақсы жолы

Менде мыналар бар

data.AppendFormat("{0},",dataToAppend);

Мәселе мынада, мен оны циклда қолданамын және үтірлі үтір болады. Сүзгі үтірлерін жоюдың ең жақсы жолы қандай?

Деректерді ішкі жолдың жолына өзгерту керек пе?

56
қосылды автор andreister, көзі
қосылды автор Sam Leach, көзі
string.Join («,», yourCollection) ? Өңдеу: жауап ретінде қосылды.
қосылды автор Vlad, көзі
@Chris: бұл жолы StringBuilder мүлдем қажет емес.
қосылды автор Vlad, көзі
мүмкін, оны кейінірек алып тастаудың орнына үтірді қосудан аулақ бола аласыз. Қараңыз: stackoverflow.com/questions/581448/&hellip арқылы жолды оқыңыз; (Джон Скитеттің жауабы)
қосылды автор Paolo Falabella, көзі
@Vlad: Сіз бұл жауапты ^^ жасауыңыз мүмкін
қосылды автор C4stor, көзі
@Влад Иә, кешірім сұраймын, мен оны дұрыс түсіндім; Менің ойымша, оны түпкілікті салынған жолды ауыстыру туралы ұсыныс ретінде ұсынды деп ойладым. (Менің пікірімді уақытында жойдым деп ойладым).
қосылды автор Chris Sinclair, көзі
«Дубликат» мәселесі шынымен де емес (кем дегенде, көп емес). Бұл соңғы таңбадан сұрайды; басқа сұрақ stackoverflow.com/q/5701163/292060 белгілі бір таңбаның соңғы (үтір) сұрайды, ол мүмкін жолда соңғы болмауы керек.
қосылды автор goodeye, көзі
Бұл мәселені шешуіңіз керек, себебі шешім үшін қажет емес. Бірақ, көшірмелерде орналастырылғандай StringBuilder-дің соңынан кейіпкерлерді алудың ең оңай жолы - оның ұзындығын қысқарту.
қосылды автор Chris, көзі

11 жауаптар

Ең қарапайым және ең тиімді жолы мына пәрменді орындау болып табылады:

data.Length--;

мұны меңзерді (яғни соңғы индексті) бір таңбаға бұрын жылжытасыз, бірақ сіз нысанның өзгермеуін өзгертпейсіз. Шындығында, StringBuilder параметрін тазарту ең жақсы түрде Length арқылы жасалады (бірақ шын мәнінде Clear() оның орындалуы ұқсас):

data.Length = 0;

қайта бөлу, себебі ол бөлу кестесін өзгертпейді. Осыны былай деп ойлап көрші: енді осы байттарды танымағым келмейді. Енді ToString() қоңырау шалғанда да Length өткеннен ештеңені танымайды, жақсы, ол мүмкін емес. Бұл сіз беріп отырғаннан гөрі көп орын бөлетін өзгермелі нысан, ол жай ғана осылай салынған.

153
қосылды
@ ErenErönmez, тері, енді мағынасы бар! Фантастикалық бақылау.
қосылды автор Mike Perrenoud, көзі
@ ErenErsönmez, әділ жеткілікті досым, мен Clear() жасайды, бірақ күлкілі нәрсе неғұрлым нақты мәлімдеу керек еді. Clear() әдісінің бірінші жолы . Бірақ, шын мәнінде интерфейсті білесіз бе, содан кейін бұл қайтарады . Енді мені өлтіретін нәрсе. Length = 0 параметрін орнату бұрыннан бар сілтемесін өзгертеді, неге өзіңізді қайтарасыз?
қосылды автор Mike Perrenoud, көзі
data.Length = 0; : бұл дәл StringBuilder.Clear дегенді білдіреді, сондықтан ниеттің анықтығы үшін StringBuilder.Clear пайдалану керек.
қосылды автор Eren Ersönmez, көзі
Менің ойымша, бұл «еркін сөйлеуге» мүмкіндік бар. Append де өзін қайтарады.
қосылды автор Eren Ersönmez, көзі
Рахмет! Жылдам әрі көп көмектесті. :)
қосылды автор webMac, көзі

Жай пайдаланыңыз

string.Join(",", yourCollection)

Осылайша сізге StringBuilder және цикл қажет емес.

31
қосылды
Ең жақсы жауап - бұл мәселені шешетін адам емес, бірақ ол оны болдырмайды.
қосылды автор LastTribunal, көзі
Жол құрастырушысын жасау үшін циклды пайдаланудың жылдарынан кейін, кейінгі үтірді алып тастап, мен оны жай ғана қолданған болар едім. Кеңеске рақмет!
қосылды автор Caverman, көзі
@Vlad haha ​​маған қосымша сынақтар жасау үшін рахмет .. бұл жұмыс істейді .. Кешіріңіз, менің үлгілік сынағым бос бос орын ретінде бос кеңістікте аяқталды және оны соңында біреуін қосқаны көрінді. PS алғыс
қосылды автор Seabizkit, көзі
@Vlad Мен оны тексеремін, тек қарапайым сынақ ретінде шикі сынақ ретінде жасаймын, және олар солай етпеді. string.Join («,», yourCollection) әлі соңында , бар. сондықтан жоғарыда string.Join («,», yourCollection) тиімсіз және оны өз бетіңізбен жоймайды.
қосылды автор Seabizkit, көзі
Бұл жұмыс c #
қосылды автор Seabizkit, көзі
@Seabizkit: Әрине! Барлық сұрақ C# туралы.
қосылды автор Vlad, көзі
@Seabizkit: Қош келдіңіз!
қосылды автор Vlad, көзі
@Seabizkit: өте қызықты! Сіз мысал жібере аласыз ба? Менің кодымда ол өте жақсы жұмыс істейді: ideone.com/aj8PWR
қосылды автор Vlad, көзі
@RossPresser: Шынында.
қосылды автор Vlad, көзі
@RossPresser: деректердің жиі жинақта болғаны көп жағдайда. Немесе бар топтамадан тривиалды LINQ сұранысы арқылы алуға болады.
қосылды автор Vlad, көзі
Расында ма? Осы функцияны ауыстыра алатын «маңызды LINQ сұрауын» түсіндіріп беріңіз: pastebin.com/d29JDx24
қосылды автор Ross Presser, көзі
Оның орнына коллекцияны құрастыру және коллекция айнымалысы үшін цикл қажет. Менің ойымша, ол тіпті бұзылады.
қосылды автор Ross Presser, көзі

Циклнан кейін келесілерді пайдаланыңыз.

.TrimEnd(',')

немесе жай ғана өзгереді

string commaSeparatedList = input.Aggregate((a, x) => a + ", " + x)
10
қосылды
Ол StringBuilder емес жолды пайдаланады. Сонымен қатар, бұл өте тиімсіз: алдымен конверсиялау, содан кейін кесу.
қосылды автор Piotr Stapp, көзі

Бұл туралы қалай ..

string str = "The quick brown fox jumps over the lazy dog,";
StringBuilder sb = new StringBuilder(str);
sb.Remove(str.Length - 1, 1);
6
қосылды

Мен жолшыққыштың ұзындығын басқарғым келеді:

data.Length = data.Length - 1;
4
қосылды
Неге жай data.Length - немесе - data.Length ?
қосылды автор Gone Coding, көзі

Мен ұсынамын, Сіз өзіңіздің цикл алгоритміңізді өзгертесіз:

  • Екіншіден емес, үтірді элементке қосыңыз, бірақ
  • false дегеннен басталатын логикалық айнымалыны пайдаланыңыз, бірінші үтірді басып тастаңыз
  • Бұл логикалық айнымалыны тексергеннен кейін шын мәніне орнатыңыз
3
қосылды
Бұл, ең алдымен, барлық ұсыныстардың тиімділігі (және көп код талап етеді).
қосылды автор Gone Coding, көзі
@Vlad жауапына қараңыз
қосылды автор Noctis, көзі

Элементтер жинағын үтірмен бөлінген жолға айналдыру үшін string.Join әдісін қолданыңыз. Бұл жетекші немесе артындағы үтір жоқтығын, сондай-ақ жолдың тиімді салынуын қамтамасыз етеді (қажетсіз аралық жолдарсыз).

2
қосылды

Сізде екі нұсқа бар. Біріншіден, Remove әдісін пайдалану өте тиімді, бұл өте тиімді. Екінші тәсілі - ToString - бастау индексі және аяқталу индексі ( MSDN құжаттары )

1
қосылды

Осындай SO мәселесі мұнда.

Маған StringBuilder кеңейтім әдісін қолдану ұнады.

RemoveLast әдісі

1
қосылды

Иә, цикл аяқталғаннан кейін оны жолға айналдырыңыз:

String str = data.ToString().TrimEnd(',');
0
қосылды
@Garath Егер сіз «тиімсіз» дегенді білдірсеңіз, келіспеймін. Бірақ ол болар еді тиімді.
қосылды автор DonBoitnott, көзі
бұл өте тиімсіз: алдымен жолға қайта айналдыру, содан кейін кесу.
қосылды автор Piotr Stapp, көзі

Ең қарапайым тәсілі Join() әдісін пайдалану:

public static void Trail()
{
    var list = new List { "lala", "lulu", "lele" };
    var data = string.Join(",", list);
}

Егер сізге шынымен StringBuilder қажет болса, соңғы үтір циклден кейін қиып алыңыз:

data.ToString().TrimEnd(',');
0
қосылды
data.ToString (). TrimEnd (','); тиімсіз
қосылды автор bastos.sergio, көзі