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