У меня есть простая функция, которая перебирает статический массив строк и проверяет, содержит ли строка какой-либо экземпляр массива. Если true, то текст из строки удаляется (заменяется пустой строкой).
Эта функция работает, но для этого мне нужно создать выражение LINQ (или однострочное выражение). Я не могу понять, как это сделать, если не превращу свою строку в массив. Но если я это сделаю, то это усложнит попытку сопоставить строки объектов. Как я могу сделать это в однострочном режиме?
private static string[] facilities = { "MX10", "MX80", "MX81", "MX82", "MX83", "US00", "US10", "US11", "US20", "US30", "US50", "US60", "US70", "US99" };
private static string cleansePN(string s)
{
for (int i = 0; i < facilities.Length; i++)
{
s = s.Replace(facilities[i], string.Empty);
}
return s;
}
@IanMercer Мне это нравится... так что по существу return Regex.Replace(s, @"MX10|MX80|...", string.Empty);
Может быть Regex r = new Regex("MX[0-9]+|US[0-9]+", RegexOptions.Compiled);
, если вы хотите поймать все MX и US, за которыми следует одна или несколько цифр. Или вы можете сделать это более точным, если это всегда две цифры.
Отвечает ли это на ваш вопрос? замена строки с помощью Linq в c#
Linq Совокупность:
private static string cleansePN(string s)
{
return facilities.Aggregate(s, (current, t) => current.Replace(t, string.Empty));
}
Потрясающий! Вы бы сказали, что цикл for быстрее (для строки из 10-30 символов) или он незначителен?
@bagofmilk Aggregate
использует внутри foreach
, так что это равносильно
Если массив объектов действительно статичен, не думали ли вы просто сделать из него регулярное выражение? Замена RegEx будет проще и быстрее, чем LINQ над массивом.