筛选列表条目

时间:2016-12-16 14:30:19

标签: c# arrays list

我有一个包含3个条目的列表 -

public class entry
{
    string name;
    string age;
    string likes;    
}

List<entry> groupEntry = new List<entry>();

哪里 -

groupEntry[0].name = "john";
groupEntry[0].age= "26";
groupEntry[0].likes= "cats";

groupEntry[1].name = "john";
groupEntry[1].age= "26";
groupEntry[1].likes= "dogs";

groupEntry[2].name = "matt";
groupEntry[2].age= "32";
groupEntry[2].likes= "frogs";

我要做的是创建一个新列表,其中name是一个唯一标识符,只需为每个名称创建一个条目,但是将这些条目一起添加到字符串数组中,结果列表看起来像 -

public class filteredEntry
{
    string name;
    string age;
    List<string> likes;    
}

List<filteredEntry> filteredGroupEntry = new List<filteredEntry>();

filteredGroupEntry [0].name = "john";
filteredGroupEntry [0].age= "26";
filteredGroupEntry [0].likes= ["cats", "dogs"];

filteredGroupEntry [1].name = "matt";
filteredGroupEntry [1].age= "32";
filteredGroupEntry [1].likes= "frogs";

我的想法是使用groupEntry做一个foreach,每次entry [i] .name更改在filteredGroupEntry中创建一个新记录但是无法使用likes的新数组1}}。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

首先,您需要在entrypublic中填写字段。到目前为止,您的代码无法编译。

其次,likes已经是string所以你无法将其转换为数组,但你可以做的只是连接一个人喜欢的所有内容并用{分隔它们{1}}。因此,您将按名称分组并将所有,值都放在一个字符串中。此代码仅采用第一个likes值(假设它始终是相同年龄的John,可能不是最聪明的解决方案。

age

稍后当您想要再次分隔List<entry> filteredList = groupEntry.GroupBy(x => x.name) .Select(x => new entry { name = x.First().name, age = x.First().age, likes = String.Join(", ", x.Select(l=>l.likes)) }).ToList(); 件时,您可以按like分割:

,

修改

我刚看到您编辑了帖子并添加了string [] allOneLikes = filteredList[0].likes.Split(','); 课程。 这当然改变了这种情况。因此,您可以在filteredEntry语句中使用此类:

Select

答案 1 :(得分:2)

我建议通过 Linq分组

List<filteredEntry> filteredGroupEntry = groupEntry
  .GroupBy(entry => new { // grouping by name + age
     name = entry.name,
     age = entry.age})
  .Select(chunk => new filteredEntry() { 
     name = chunk.Key.name,
     age = chunk.Key.age, 
     // collapse all likes into list
     likes = chunk.Select(entry => entry.likes).ToList()})
  .ToList();