我有一个包含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}}。我怎样才能做到这一点?
答案 0 :(得分:2)
首先,您需要在entry
班public
中填写字段。到目前为止,您的代码无法编译。
其次,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();