#c#
#c#
Вопрос:
По сути, мне нужно разделить строку, как "aaaaa.bbbbbbbb.cccccc"
на . а затем подсчитать длину разделенных значений с помощью функции.
Func<string, bool> length = f => f.Split(".").Length > 1;
в значительной степени это так, но вместо подсчета длины разделенного массива мне нужно подсчитать, сколько букв на элемент массива и посмотреть, превышают ли они определенную длину.
Комментарии:
1.
Func<string, bool>
этого вам не даст.2. Вы не хотите
Func<string, char, IEnumerable<int>>
?3. @Jodrell, которая не вернет несколько значений
4. @DanielA. Белый цвет вернет последовательность целых чисел.
5. зевок,
Func<string, char, IEnumerable<int>> getLengths = (input, separator) => input.Split(separator).Select(s => s.Length);
или что-то в этом роде.
Ответ №1:
Если вам нужен логический ответ, то это либо одно из следующих (в зависимости от того, нужна ли вам хотя бы одна подстрока длиной > 1 или вы хотите их все:
Func<string, bool> length1 = f => f.Split('.').Any(s => s.Length > 1);
Func<string, bool> length2 = f => f.Split('.').All(s => s.Length > 1);
Ответ №2:
Я думаю, что вы пытаетесь это сделать:
string input = "aaaaa.bbbbbbbb.cccccc";
var parts = input.Split('.');
var lengths = parts.Select(e=>e.Count());
Ответ №3:
Если вы имеете в виду для каждой буквы: aaaaa.bbbbbbbb.cccccc -> a = 5, b = 8, c = 6
Func<string, IEnumerable<int>> length = f => f.Split('.').Select(a => a.Length)
Ответ №4:
Насколько я понимаю, вам нужно взять строку, разделить ее только на разделитель ‘.’, а затем посчитать, чтобы увидеть, больше ли каждое разделенное значение 1.
Если это так, вы можете использовать следующее:
Func<string, bool> length = str => str.Split('.').All(s => s.Length > 1);
Сначала строка будет разделена вашим разделителем, затем повторите все значения, чтобы проверить, больше ли они 1.
Быстрый тестовый пример:
string test1 = "aaa.b.ccccccc";
string test2 = "aaaaaa.bbb.c";
string test3 = "aaa.bbb.ccccc";
Console.WriteLine(length(test1)); // false, as b is 1, not greater
Console.WriteLine(length(test2)); // false, for similar reasons
Console.WriteLine(length(test3)); // true, all are greater
Ответ №5:
Другой способ с использованием делегата функции:
Func<string, Tuple<string[], int[]>> length = (str) => {
string[] stringParts = str.Split('.');
int[] countLetters = stringParts.Select(s => s.Length).ToArray();
return new Tuple<string[], int[]>(stringParts, countLetters);
};
string input = "aaaaa.bbbbbbbb.cccccc";
var res = length(input);
string[] strs = res.Item1;
int[] countLetter = res.Item2;
for (int i = 0; i < strs.Length; i )
{
Console.WriteLine(strs[i]);
Console.WriteLine(countLetter[i]);
}
Вывод:
aaaaa
5
bbbbbbbb
8
cccccc
6
Возможно, метод расширения был бы более простым способом сделать это.
Ответ №6:
Как насчет того, чтобы написать метод, который возвращает список строк, превышающих указанную вами длину, что-то вроде этого:
IEnumerable<string> GetSplittedAboveLimit(string inputString,int limit)
{
var splitted = inputString.Split(".");
foreach(var input in splitted)
{
if(input.Length > limit)
{
yield return input;
}
}
}
Ответ №7:
как насчет этого [Ссылка на пример]:
Func<string, List<int>> length = f => f.Split('.').Select(x=>x.Length).ToList();
И вызвать метод следующим образом:
string inputStr = "aaaaa.bbbbbbbb.cccccc";
Console.WriteLine(String.Join(",",length(inputStr))); // prints 5,8,6
Пожалуйста, обратите внимание: второй параметр в Func
обозначает тип возвращаемого значения, здесь, в примере, я использовал его как List<int>
вот почему я добавил .ToList()
в конце кода. Вы можете соответствующим образом изменить возвращаемые типы. Если вы согласны с IEnumerable<int>
, то
Func<string, IEnumerable<int>> length = f => f.Split('.').Select(x=>x.Length)
достаточно.
Комментарии:
1. OP хочет подсчитать сумму в каждой записи. Это не будет вычислять длину каждого массива, только самого массива.
2. @Frontear, спасибо, что поправили меня, я только что обновил сообщение, не могли бы вы просмотреть то же самое
3. @Jodrell: спасибо, что исправили меня, я только что обновил сообщение, не могли бы вы просмотреть то же самое
4. @JohneyBronswicAppleton: добавить
using System.Linq;
в раздел использования5. Почему
ToList()
?