C# 使用C将多个值分组为一个序列
我有以下清单:C# 使用C将多个值分组为一个序列,c#,lambda,C#,Lambda,我有以下清单: UserName LanguageSpoken ------------------------- Bob English Bob French Alan Italian Alan Spanish Alan German 我想要另一个列表,如: Bob English/French Alan Italian/Spanish/German 如何使用C中的lambda表达式来实现这一点 谢谢我的方法是使
UserName LanguageSpoken
-------------------------
Bob English
Bob French
Alan Italian
Alan Spanish
Alan German
我想要另一个列表,如:
Bob English/French
Alan Italian/Spanish/German
如何使用C中的lambda表达式来实现这一点
谢谢我的方法是使用正则表达式解析数据,然后使用linq对其进行分组。你能告诉我们到目前为止你都做了些什么吗 如果您的列表类似于:
class Person
{
public string Name { get; set; }
public string Language { get; set; }
}
List<Person> myList = /* Initialization */
希望这能有所帮助。下面是一个您可以使用的实现
class UserLanguage
{
public string UserName { get; set; }
public string Language { get; set; }
}
static class EnumerableExtensions
{
public static string Concatenate(this IEnumerable<string> source, string delimiter)
{
using (var enumerator = source.GetEnumerator())
{
if (enumerator.MoveNext())
{
StringBuilder builder = new StringBuilder(enumerator.Current);
while (enumerator.MoveNext())
{
builder.Append(delimiter).Append(enumerator.Current);
}
return builder.ToString();
}
else
{
return null;
}
}
}
}
class Program
{
static void Main(string[] args)
{
// assuming that you already have data stored in a structure similar to this
var rawData = new List<UserLanguage>()
{
new UserLanguage { UserName = "Bob", Language = "English" },
new UserLanguage { UserName = "Bob", Language = "French" },
new UserLanguage { UserName = "Alan", Language = "Italian" },
new UserLanguage { UserName = "Alan", Language = "Spanish" },
new UserLanguage { UserName = "Alan", Language = "German" },
};
// group these objects together by UserName
var groupedData = rawData.GroupBy(userLanguage => userLanguage.UserName);
foreach (var grouping in groupedData)
{
Console.WriteLine(grouping.Key + "\t" + grouping.Select(userLanguage => userLanguage.Language).Concatenate("/"));
}
}
}
班主任
{
字符串用户名{get;set;}
字符串语言{get;set;}
}
var table=新列表{
新人{
用户名=鲍勃;
语言口语=英语
}
/*下一个人*/
};
var userNameGroups=来自表中的n
按n.UserName将n分组为g
选择新的{
keyUserName=g.Key,
语言口语=g
};
userNameGroups中的foreachvar g{
Console.Writeg.keyUserName.ToString;
外语口语{
Console.WriteLinen.ToString;
}
}
当你说我有下面的列表时,这是一个列表,一个大的文本块,还是什么?@lasnog-也许试试下面我的方法,如果你卡住了,让我们知道。我宁愿帮助你学会解决问题,也不愿意为你做所有的工作。
class UserLanguage
{
public string UserName { get; set; }
public string Language { get; set; }
}
static class EnumerableExtensions
{
public static string Concatenate(this IEnumerable<string> source, string delimiter)
{
using (var enumerator = source.GetEnumerator())
{
if (enumerator.MoveNext())
{
StringBuilder builder = new StringBuilder(enumerator.Current);
while (enumerator.MoveNext())
{
builder.Append(delimiter).Append(enumerator.Current);
}
return builder.ToString();
}
else
{
return null;
}
}
}
}
class Program
{
static void Main(string[] args)
{
// assuming that you already have data stored in a structure similar to this
var rawData = new List<UserLanguage>()
{
new UserLanguage { UserName = "Bob", Language = "English" },
new UserLanguage { UserName = "Bob", Language = "French" },
new UserLanguage { UserName = "Alan", Language = "Italian" },
new UserLanguage { UserName = "Alan", Language = "Spanish" },
new UserLanguage { UserName = "Alan", Language = "German" },
};
// group these objects together by UserName
var groupedData = rawData.GroupBy(userLanguage => userLanguage.UserName);
foreach (var grouping in groupedData)
{
Console.WriteLine(grouping.Key + "\t" + grouping.Select(userLanguage => userLanguage.Language).Concatenate("/"));
}
}
}