如何创建List <class>并验证列表是否包含已经</class>的项目

时间:2013-05-15 04:30:33

标签: c# list contains

如果我表示我想做的话更容易:

public struct Server
{
   public string ServerName;
   public string SiteName;
}

List<Server> targetServerList = GetTargetServerList();

targetServerList将包含以下数据:

SiteName: A
ServerName: 1

SiteName: A
ServerName: 2

SiteName: B
ServerName: 3

SiteName: C
ServerName: 4

目标:我需要创建一个包含以下内容的列表:

SiteName: Site A
ServerNames: 1,2

SiteName: Site B
ServerNames: 3

SiteName: Site C
ServerNames: 4

所以我创建了以下类:

private class ServersPerSite
{
   string ServerNames;
   string SiteName;
}

所以现在我需要循环并添加一个带有新SiteName的新项目,如果SiteName尚不存在,再加上ServerName。如果确实存在,我只需要添加ServerName:

foreach (Server server in targetServerList)
{
  //??missing code
}

我该怎么做?在Javascript中非常简单:

  //Separate the servers per site
  var sites=new Object();

  $("#ServerGrid").jqGrid('getGridParam', 'data').forEach(function(row) 
  {
    if(!sites[row.SiteName])
    {
        sites[row.SiteName] = new Array();
    }
    sites[row.SiteName][sites[row.SiteName].length] = row.ServerName;
  }

谢谢!

2 个答案:

答案 0 :(得分:4)

您可以使用GroupBy方法使用LINQ:

var result = targetServerList
                .GroupBy(s => s.SiteName)
                .Select(g => new ServersPerSite()
                            {
                                SiteName = "Site " + g.Key,
                                ServerNames = string.Join(",", g);
                            });

修改:结果为Dictionary

targetServerList.GroupBy(s => s.SiteName)
                .ToDictionary(g => "Site " + g.Key,
                              g => string.Joins(",", g));

答案 1 :(得分:1)

在这种情况下,Dictionary<string, string>甚至Dictionary<string, IList<string>>将是更好的选择。

public struct Server
{
   public string ID;
   public string SiteName;
}



private IDictionary<string, IList<string>> servers;

foreach(var server in GetTargetServerList()){
    if(!servers.ContainsKey(server.SiteName) {
        servers.Add(server.SiteName, new List<string>());
    }
    servers[server.SiteName].Add(server.ID);
}
相关问题