C# 在对象c中按列表对对象列表进行排序#

C# 在对象c中按列表对对象列表进行排序#,c#,list,sorting,C#,List,Sorting,我有一个对象列表(obj1),在每个对象中我有另一个对象列表,如下所示: 列出obj1 Obj1 字符串名称 列出obj2 Obj2 字符串名称 int-Id 我想按obj2Ids列表标记的顺序排列obj1列表 obj2列表中的第一个元素定义了obj1列表的顺序,如果它们相同,则第二个元素定义了顺序,依此类推,直到obj2列表结束 示例数据: “测试”:{(“A”,2),(“B”,3)} “测试2”:{(((“C”,1),(“D”,2)} “测试3”:{((“A”,2),(“B”,2)

我有一个对象列表(
obj1
),在每个对象中我有另一个对象列表,如下所示:

列出obj1

Obj1

  • 字符串名称
  • 列出obj2
Obj2

  • 字符串名称
  • int-Id
我想按
obj2
Id
s列表标记的顺序排列
obj1
列表

obj2
列表中的第一个元素定义了
obj1
列表的顺序,如果它们相同,则第二个元素定义了顺序,依此类推,直到
obj2
列表结束

示例数据:

  • “测试”:{(“A”,2),(“B”,3)}
  • “测试2”:{(((“C”,1),(“D”,2)}
  • “测试3”:{((“A”,2),(“B”,2),(“C”,3)}
结果数据:

  • “测试2”:{(((“C”,1),(“D”,2)}
  • “测试3”:{((“A”,2),(“B”,2),(“C”,3)}
  • “测试”:{(“A”,2),(“B”,3)}

    • 以下解决方案将使用
      int CompareTo(object obj)
      方法为
      Obj2
      Obj1
      实现
      i可比较
      接口
      Obj2
      必须通过其
      Id
      进行比较,
      Obj1
      将通过
      列表进行比较
      有了它,您可以在如下列表上调用
      Sort()
      list

      在这里

      以下是所需的代码片段,并在上面进行了描述:

      class Obj2 : IComparable
      {
          public string Name { get; set; }
          public int Id { get; set; }
      
          // ...
      
          public int CompareTo(object obj)
          {
              Obj2 other = obj as Obj2;
              return Id.CompareTo(other.Id);
          }
      }
      
      class Obj1 : IComparable
      {
          public string Name { get; set; }
          public List<Obj2> Objects { get; set; }
      
          // ...
      
          public int CompareTo(object obj)
          {
              Obj1 other = obj as Obj1;
              /* loop until one list ends */
              for (int idx = 0; idx < Objects.Count && idx < other.Objects.Count; ++idx)
              {
                  int comparison = Objects[idx].Id.CompareTo(other.Objects[idx].Id);
                  /* if not equal return */
                  if (comparison != 0)
                  {
                      return comparison;
                  }
              }
              /* if they were equal until now use count to compare */
              return Objects.Count - other.Objects.Count;
          }
      }
      

      你真的在使用
      列表吗?
      ?因为这会让事情变得复杂。
      "Test2" : { ("C", 1) ("D", 2) }
      "Test3" : { ("A", 2) ("B", 2) ("C", 3) }
      "Test" : { ("A", 2) ("B", 3) }