【问题标题】:C# Converting List to 2d list and adding additional valuesC# 将列表转换为二维列表并添加附加值
【发布时间】:2016-05-10 06:22:13
【问题描述】:

您好,在这个问题上需要一些帮助。希望我能描述得很好。

我有一个解析器,它遍历一个文档并找到 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 匹配的行并将它们添加到列表中。这是我遇到问题的部分。

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

我正在查看此内容,但似乎无法找到一种方法可以复制我的 Distinct 列表,然后将我需要的行添加到新数组中。

从我可以测试的情况来看,这似乎会将值添加到主列表中

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

如何将我需要的行添加到相应的主列表中。说 masterList[0].Add 值为 1,我如何将行添加到 1?

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

基本上我想要

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

如此等等。我的解析工作正常,只是将值放入第二个字符串列表是问题所在。

谢谢,

【问题讨论】:

    标签: c# list multidimensional-array


    【解决方案1】:

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

    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);
    

    【讨论】:

    • 会话 1 可以有多个条目。当我添加时我将如何合并它?
    • 会话 ID 也可以是数字或数字和字符串。所以 SessionID 需要是一个字符串。
    • 所以我将其更改为 SessionID 的字符串。但是,当我测试 session1.SessionLog.Add("description lline1");我不断收到 NullReferenceException。 {"对象引用未设置为对象的实例。"}
    • 添加 session1.SessionLog = new List(); session1.SessionId = 1 之后;
    • 最后一个问题。如何将多个添加到 session1.SessionLog.add ?这就是我拥有它的方式,但它似乎总是为会话日志写入索引零。这是正确的会话 DI,但不是日志。 objList[0].SessionLog.add("test1"); objList[0].SessionLog.add("test2");
    【解决方案2】:

    这是一种方法:

     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

    【讨论】:

      猜你喜欢
      • 2021-12-18
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      • 2023-02-21
      • 2014-05-26
      • 1970-01-01
      • 1970-01-01
      • 2023-01-10
      相关资源
      最近更新 更多