Я заметил, что в нашем коде много вызовов string.Split(string[],StringSplitOptions), например:
input.Split(new string[] { "\r\n", "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries)
или вот так:
input.Split(new string[] { "\r", "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries)
Моя интуиция подсказывает мне, что я могу заменить их все чем-то вроде этого, чтобы улучшить читабельность (и, возможно, повысить производительность, хотя меня это не так уж и волнует), и что не будет побочных эффектов:
static readonly string CrLfStrings = new char[] { '\r', '\n' };
input.Split(CrLfStrings, StringSplitOptions.RemoveEmptyEntries)
На самом деле, моя интуиция подсказывает мне, что для любого набора символов SC, если string.Split(string[],StringSplitOptions) вызывается с помощью RemoveEmptyEntries и набора строк, включающего все односимвольные строки SC, а все остальные строки состоят только из символов SC, Я мог бы заменить его вызовом string.Split(char[],StringSplitOptions) с помощью RemoveEmptyEntries и SC, и побочных эффектов не будет.Моя догадка верна? Можно ли это доказать? Если да, то я могу с радостью произвести замену везде, даже если я не понимаю окружающий код.
Другими словами, будет ли приведенный ниже метод Compare возвращать true для любой ненулевой строки? Меня не очень интересуют крайние случаи, когда у одного может не хватить памяти, а у другого нет.
using System;
using System.Linq;
private static bool Compare(string input)
{
string[] prev = null;
var funcs = new Func[] { Split0, Split1, Split2 };
for (int i = 0; i < funcs.Length; i++)
{
var curr = funcs(input);
if (i != 0 && !(curr.SequenceEqual(prev)))
{
return false;
}
prev = curr;
}
return true;
}
private static string[] Split0(string input) =>
input.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
private static string[] Split1(string input) =>
input.Split(new string[] { "\r\n", "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries);
private static string[] Split2(string input) =>
input.Split(new string[] { "\r", "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
Подробнее здесь: https://stackoverflow.com/questions/783 ... -splitchar
Замена string.Split(string[]) на string.Split(char[]) ⇐ C#
Место общения программистов C#
-
Anonymous
1726476657
Anonymous
Я заметил, что в нашем коде много вызовов string.Split(string[],StringSplitOptions), например:
input.Split(new string[] { "\r\n", "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries)
или вот так:
input.Split(new string[] { "\r", "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries)
Моя интуиция подсказывает мне, что я могу заменить их все чем-то вроде этого, чтобы улучшить читабельность (и, возможно, повысить производительность, хотя меня это не так уж и волнует), и что не будет побочных эффектов:
static readonly string CrLfStrings = new char[] { '\r', '\n' };
input.Split(CrLfStrings, StringSplitOptions.RemoveEmptyEntries)
На самом деле, моя интуиция подсказывает мне, что для любого набора символов [b]SC[/b], если string.Split(string[],StringSplitOptions) вызывается с помощью RemoveEmptyEntries и набора строк, включающего все односимвольные строки [b]SC[/b], а все остальные строки состоят только из символов [b]SC[/b], Я мог бы заменить его вызовом string.Split(char[],StringSplitOptions) с помощью RemoveEmptyEntries и [b]SC[/b], и побочных эффектов не будет.Моя догадка верна? Можно ли это доказать? Если да, то я могу с радостью произвести замену везде, даже если я не понимаю окружающий код.
Другими словами, будет ли приведенный ниже метод Compare возвращать true для любой ненулевой строки? Меня не очень интересуют крайние случаи, когда у одного может не хватить памяти, а у другого нет.
using System;
using System.Linq;
private static bool Compare(string input)
{
string[] prev = null;
var funcs = new Func[] { Split0, Split1, Split2 };
for (int i = 0; i < funcs.Length; i++)
{
var curr = funcs[i](input);
if (i != 0 && !(curr.SequenceEqual(prev)))
{
return false;
}
prev = curr;
}
return true;
}
private static string[] Split0(string input) =>
input.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
private static string[] Split1(string input) =>
input.Split(new string[] { "\r\n", "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries);
private static string[] Split2(string input) =>
input.Split(new string[] { "\r", "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
Подробнее здесь: [url]https://stackoverflow.com/questions/78318480/replacing-string-splitstring-with-string-splitchar[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия