[英]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.