Разбиение текста в две коллекции по типу данных?
Есть задача - разбить текст по двум коллекциям: в первую нужно перенести только численные значения, во вторую - перенести каждый атрибут без пробела.
string strophe_template = "11А 9Б 11А 9Б 11А 9Б 11А 9Б 11А 9Б 11А 9Б"
По итогу содержание коллекций должно быть следующим:
Первая коллекция
[11 9 11 9 11 9 11 9 11 9 11 9]
Вторая коллекция
[11А 9Б 11А 9Б 11А 9Б 11А 9Б 11А 9Б 11А 9Б]
Соответственно возникает вопрос как это сделать?
Ответы (3 шт):
Автор решения: Faraday
→ Ссылка
string strophe_template = "11А 9Б 11А 9Б 11А 9Б 11А 9Б 11А 9Б 11А 9Б";
string[] parts = strophe_template.Split(' ');
var numbersCollection = parts.Where(p => int.TryParse(p, out _)).Select(int.Parse).ToList();
var attributesCollection = parts.Where(p => !int.TryParse(p, out _)).ToList();
Автор решения: DmitriySidyakin
→ Ссылка
Бесплатная книга по .NET и C#: Книга по C#
Киниги по Экосистеме C#: https://metanit.com/sharp/
Сайт обучения Microsoft: https://learn.microsoft.com/ru-ru/dotnet/csharp/
string strophe_template = "11А 9Б 11А 9Б 11А 9Б 11А 9Б 11А 9Б 11А 9Б";
// Вторая коллекция:
var second_collection = strophe_template.Split(' ');
// Первая коллекция:
var first_collection = second_collection.Select(code => code.Replace(code.Last().ToString(), ""));
// Если нужно конвертировать в целые:
// TODO: Удалить если не нужно:
var second_collectionByte = second_collection.Select(code => byte.Parse(code));
Автор решения: aepot
→ Ссылка
Очень легко с помощью регулярок делается.
static void Main(string[] args)
{
string strophe_template = "11А 9Б 11А 9Б 11А 9Б 11А 9Б 11А 9Б 11А 9Б";
var matches = Regex.Matches(strophe_template, @"(\d+)\w+");
string[] first = matches.Select(m => m.Groups[1].Value).ToArray();
string[] second = matches.Select(m => m.Groups[0].Value).ToArray();
Console.WriteLine(string.Join(" ", first));
Console.WriteLine(string.Join(" ", second));
}
Вывод в консоль
11 9 11 9 11 9 11 9 11 9 11 9
11А 9Б 11А 9Б 11А 9Б 11А 9Б 11А 9Б 11А 9Б