[英]C# - Convert delimited string array w/ duplicates to dictionary using LINQ
[英]Convert delimited string to array and group using LINQ in C#
我有一个具有分隔格式的字符串,如下所示:
orgname :名字姓氏,名字姓氏;
(这可以重复使用组织名称和每个组织的可变名称名称)
例:
**XXX University**: Martha Zander, Rick Anderson; **Albert School**: Nancy Vanderburg, Eric Towson, George Branson; **Hallowed Halls**: Jane Goodall, Ann Crabtree, Rick Grey, Tammy Hudson;
结果字符串需要按组织名称和姓氏进行分组和排序,如下所示:
**Albert School**: George Branson, Eric Towson, Nancy Vanderburg;
**Hallowed Halls**: Ann Crabtree, Jane Goodall, Rick Grey, Tammy Hudson;
**XXX University**: Rick Anderson, Martha Zander;
我到现在为止:
string[][] splitThis = staff.Split(';').Select(s => s.Split(':')).ToArray();
这给了我一个按组织名称拆分的数组,然后我被困在这之后。
我知道我需要一个包含orname,firstname,lastname的多维数组,但是我不知道如何填充,分组和排序它以获得正确的结果。
public static void Main()
{
var input =
@"**Albert School**: George Branson, Eric Towson, Nancy Vanderburg;
**Hallowed Halls**: Ann Crabtree, Jane Goodall, Rick Grey, Tammy Hudson;
**XXX University**: Rick Anderson, Martha Zander;";
var universities = input
.Split(';')
.Select(ParseUniversity)
.ToArray();
}
public static University ParseUniversity(string line)
{
var fields = line
.Split(',',':')
.Select(f=>f.Trim('*','\n','\r', '\t' ,' ')) // remove trailing crap
.ToArray();
var universityName = fields.First();
var persons = fields
.Skip(1) // skip university field
.Select(ParsePerson)
.ToArray();
return new University {Name = universityName, Persons = persons};
}
public static Person ParsePerson(string field)
{
var p = field.Split(' ');
return new Person{FirstName = p.First(), LastName = p.Last()};
}
public class University
{
public string Name {get;set;}
public Person[] Persons {get;set;}
}
public class Person
{
public string FirstName {get;set;}
public string LastName {get;set;}
}
我会在这里使用正则表达式
string input = @"**XXX University**: Martha Zander, Rick Anderson; **Albert School**: Nancy Vanderburg, Eric Towson, George Branson; **Hallowed Halls**: Jane Goodall, Ann Crabtree, Rick Grey, Tammy Hudson;";
var dict = Regex.Matches(input, @"\*\*(.+?)\*\*: (.+?);")
.Cast<Match>()
.ToDictionary(x => x.Groups[1].Value, x=>x.Groups[2].Value.Split(','));
dict
将是(在json中):
{
"XXX University": [
"Martha Zander",
" Rick Anderson"
],
"Albert School": [
"Nancy Vanderburg",
" Eric Towson",
" George Branson"
],
"Hallowed Halls": [
"Jane Goodall",
" Ann Crabtree",
" Rick Grey",
" Tammy Hudson"
]
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.