将数组拆分为另一个数组
Split array into another array
我有一个这样的字符串数组:
string[] Array = new string[3] {"Man(21)", "Woman(33)", "Baby(4)"};
现在我想把这个数组拆分成这个方案:
Array = new string[6] {"Man", "21", "Woman", "33", "Baby", "4"};
有人知道吗?
你可以使用Split and SelectMany
var result = Array.SelectMany(x => x.Split(new[]
{
'(', ')'
}, StringSplitOptions.RemoveEmptyEntries)).ToArray();
var result = from str in Array
let items = str.Split('(')
from item in items
select item.Replace(")", string.Empty);
你可以试试正则表达式:
var pattern = @"(?<person>\w+)\((?<age>\d+)\)";
var Array = new string[3] { "Man(21)", "Woman(33)", "Baby(4)" };
Array = Array.SelectMany(item =>
{
var match = Regex.Match(item, pattern, RegexOptions.IgnoreCase);
var person = match.Groups["person"].Value;
var age = match.Groups["age"].Value;
return new List<string>{person, age};
}).ToArray();
根据用例,您可能会发现输出具有 Name
和 Age
属性的对象列表或字典更有用。这是前者的一个例子:
string[] arr = new[] { "Man(21)", "Woman(33)", "Baby(4)", /* test case */ "NoAge" };
var result = arr.Select(s => s.Split(new[] { '(', ')' }, StringSplitOptions.RemoveEmptyEntries)).Select(r => new
{
Name = r.First(),
Age = r.Skip(1).SingleOrDefault()
}).ToList();
结果是:
Name Age
Man 21
Woman 33
Baby 4
NoAge null
Split
命令归功于医生。
我有一个这样的字符串数组:
string[] Array = new string[3] {"Man(21)", "Woman(33)", "Baby(4)"};
现在我想把这个数组拆分成这个方案:
Array = new string[6] {"Man", "21", "Woman", "33", "Baby", "4"};
有人知道吗?
你可以使用Split and SelectMany
var result = Array.SelectMany(x => x.Split(new[]
{
'(', ')'
}, StringSplitOptions.RemoveEmptyEntries)).ToArray();
var result = from str in Array
let items = str.Split('(')
from item in items
select item.Replace(")", string.Empty);
你可以试试正则表达式:
var pattern = @"(?<person>\w+)\((?<age>\d+)\)";
var Array = new string[3] { "Man(21)", "Woman(33)", "Baby(4)" };
Array = Array.SelectMany(item =>
{
var match = Regex.Match(item, pattern, RegexOptions.IgnoreCase);
var person = match.Groups["person"].Value;
var age = match.Groups["age"].Value;
return new List<string>{person, age};
}).ToArray();
根据用例,您可能会发现输出具有 Name
和 Age
属性的对象列表或字典更有用。这是前者的一个例子:
string[] arr = new[] { "Man(21)", "Woman(33)", "Baby(4)", /* test case */ "NoAge" };
var result = arr.Select(s => s.Split(new[] { '(', ')' }, StringSplitOptions.RemoveEmptyEntries)).Select(r => new
{
Name = r.First(),
Age = r.Skip(1).SingleOrDefault()
}).ToList();
结果是:
Name Age
Man 21
Woman 33
Baby 4
NoAge null
Split
命令归功于医生。