#c# #arrays #string
#c# #массивы #строка
Вопрос:
У меня есть строка, разделенная каналами:
string line = "test|||tester||test||||||test test|"
Я читаю это введение в массив строк:
string[] wordsArr = line.Split(new string[] { "|" }, StringSplitOptions.None);
Моя цель — не писать цикл вручную самостоятельно, если в фреймворк встроен способ увидеть, сколько элементов в массиве не пусто. Также я не могу использовать RemoveEmptyEntries
свойство в StringSplitOptions
b / c, где элементы попадают в трубы.
Есть идеи?
Комментарии:
1. Почему вы хотите сделать это без цикла? Что-то будет где -то зацикливаться в любом разумном решении…
2. Мне было просто любопытно, что в любом случае возможно встроить в фреймворк без необходимости вручную выполнять проверку в цикле.
3. Существует большая разница между тем, чтобы не писать цикл самостоятельно, и тем, чтобы вообще не было цикла. ответ gunr2171 — это то, на что я бы пошел, но он использует цикл внутри
Count
.4. Правильно… Я отредактировал начальный пост, чтобы отразить это. Спасибо
Ответ №1:
Если все, что вы ищете, это количество, то используйте .Count
после разделения.
string line = "test|||tester||test||||||test test|";
int notEmptyCount = line
.Split('|')
.Count(x => !string.IsNullOrEmpty(x));
Если вы хотите отфильтровать пустые элементы и получить доступ ко всем оставшимся элементам, используйте .Where
вместо этого.
var notEmptyCollection = line
.Split('|')
.Where(x => !string.IsNullOrEmpty(x));
Комментарии:
1. Внутренне это также будет перебирать массив. Но, как сказал Джон Скит: любое разумное решение будет зацикливаться … 🙂
2. @Abbas, моей первоначальной мыслью было «нет цикла ‘do’ или ‘for / foreach'». Но да, иногда ответ, который мы получаем, — это не тот ответ, который мы хотим.
Ответ №2:
Попробуйте это:
string line = "test|||tester||test||||||test test|";
string[] wordsArr = line.Split(new string[] { "|" }, StringSplitOptions.None);
var notEmpty = wordsArr.Count(x => !String.IsNullOrEmpty(x));
Ответ №3:
Это сработало:
int wordCount = line.Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries).Length;
string[] wordsArr = line.Split(new string[] { "|" }, StringSplitOptions.None);
Ответ №4:
найдите самый простой способ, как показано ниже
string line = "test|||tester||test||||||test test|";
int notEmptyCount = line.Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries).Length;
В этом StringSplitOptions.RemoveEmptyEntries
параметре флага пустые значения при разделении опускаются.
для получения дополнительной справки проверьте здесь (MSDN)
Комментарии:
1. По сути, это тот же ответ, что и ответ, который дал сам Аль Бельмондо.