繁体   English   中英

将数组拆分为另一个数组

[英]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"};

有人有主意吗?

您可以使用SplitSelectMany

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();

根据使用情况,您可能会发现输出带有NameAge属性的对象列表或字典会更有用。 这是前者的一个示例:

        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();

结果是:

姓名年龄

男子21

女人33

婴儿4

NoAge null

感谢dotctor的Split命令。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM