在C#中使用LINQ将分隔的字符串转换为数组和组

时间:2015-06-15 21:02:48

标签: c# arrays linq csv

我有一个字符串,其分隔格式如下:

orgname :firstname lastname,firstname lastname;

(这可以重复每个组织的orgnames和可变数量的名称)

示例:

**XXX University**: Martha Zander, Rick Anderson; **Albert School**: Nancy Vanderburg, Eric Towson, George Branson; **Hallowed Halls**: Jane Goodall, Ann Crabtree, Rick Grey, Tammy Hudson;

结果字符串需要按照orgname进行分组和排序,然后按照以下方式排序:

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

这给了我一个由orgname分割的数组,然后我就被卡住了。

我知道我需要一个带有orname,firstname,lastname的多维数组,但我不知道如何填充,分组和排序以获得正确的结果。

2 个答案:

答案 0 :(得分:2)

-- create the finaltable
declare @finaltable table(data_date datetime, ind_value float)

Insert into @finaltable (data_date) 
   select distinct l.value_date  
   from #data_table l 
   order by l.value_date

   ---some code here that works

   exec sp_rename '@finaltable.ind_value', 'NewValue', 'COLUMN'     -- 

答案 1 :(得分:1)

我会在这里使用正则表达式

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"
  ]
}