C#将列表转换为2d列表并添加其他值

时间:2016-02-01 17:27:56

标签: c# list multidimensional-array

你好需要一些帮助解决这个问题。希望我能够很好地描述它。

我有一个解析器,它通过文档找到sessionID,从中删除一些标签并将它们放入列表中。

  while ((line = sr.ReadLine()) != null)
            {
                Match sID = sessionId.Match(line);
                if (sID.Success)
                {
                    String sIDString;
                    String sid = sID.ToString();
                    sIDString = Regex.Replace(sid, "<[^>]+>", string.Empty);
                    sessionIDList.Add(sIDString);
                }
            }

然后我去思考清单并获得distinctSessionID。

    List<String> distinctSessionID = sessionIDList.Distinct().ToList();

现在我需要再次考虑他的文档并添加与sessionID匹配的行并将它们添加到列表中。这是我遇到问题的部分。

我是否需要创建一个二维列表,以便将匹配的日志行添加到相应的会话中。

我正在看这个,但似乎无法弄清楚我可以复制到我的Distinct列表然后将我需要的行添加到新数组中。

从我可以测试的内容来看,这会将值添加到主列表中

List<List<string>> masterLists = new List<List<string>>();
 Foreach (string value in distinctSessionID)
{
  masterLists[0].Add(value);
}   

如何将我需要的行添加到相应的Masterlist中。假设masterList [0] .Add值为1,如何将行添加到1?

          masterList[0][0].add(myLInes);

基本上我想要

    Sessionid1
        -------> related log line
        -------> Related log line 
   SessionID2 
        -------> related log line
        -------> related log line.

等等。我解析所有工作,只是将值放到第二个字符串列表是问题。

谢谢,

2 个答案:

答案 0 :(得分:0)

这是一种方法:

 public class MultiDimDictList: Dictionary<string, List<int>>  { }
 MultiDimDictList myDictList = new MultiDimDictList ();
 Foreach (string value in distinctSessionID)
{
     myDictList.Add(value, new List<int>()); 
     for(int j=0; j < lengthofLines; j++)
     {
         myDictList[value].Add(myLine);
     }
}

您需要将lengthofLines替换为数字,以指示您拥有的线的迭代次数。

见Charles Bretana的回答here

答案 1 :(得分:0)

您可以做的是,简单地创建一个具有公共属性的类,并创建该自定义类的列表。

public class Session
{
  public int SessionId{get;set;}
  public List<string> SessionLog{get;set;}
}

List<Session> objList = new List<Session>();

var session1 = new Session();
session1.SessionId = 1;
session1.SessionLog.Add("description lline1");

objList.Add(session1);