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("/"));
        }
    }
}