需求:存储自定义对象并遍历Student(name,age),并按照姓名的长度排序 * TreeSet集合保证元素排序和唯一性的原理 * 唯一性:是根据比较的返回是否是0来决定。 * 排序: A:自然排序(元素具备比较性) 让元素所属的类实现自然排序接口 Comparable B:比较器排序(集合具备比较性) 让集合的构造方法接收一个比较器接口的子类对象 Comparator
时间: 2024-02-18 12:01:00 浏览: 105
好的,根据您的需求,我可以给您提供以下代码实现:
```python
from typing import List
from dataclasses import dataclass
@dataclass(order=True)
class Student:
name: str
age: int
students: List[Student] = [
Student("Tom", 18),
Student("Jerry", 20),
Student("Alice", 19),
Student("Bob", 21),
]
# 使用 TreeSet 对象存储 Student,按照姓名长度排序
from sortedcontainers import SortedSet
student_set = SortedSet(students, key=lambda s: len(s.name))
# 遍历 student_set
for s in student_set:
print(s)
```
上述代码定义了一个 `Student` 类,使用 `dataclass` 装饰器来自动生成 `__init__`、`__eq__`、`__lt__` 等方法,通过 `order=True` 参数指定按照属性进行排序。接下来,我们创建了几个 `Student` 对象,并将它们存储到 `students` 列表中。然后,我们使用 `SortedSet` 对象 `student_set` 来存储 `students` 列表中的学生对象,并按照姓名长度排序。最后,我们遍历 `student_set` 集合,依次输出其中每个学生对象。
`SortedSet` 对象是 `sortedcontainers` 模块中的一个类,它提供了类似于 `set` 的功能,但是它保证集合中的元素是有序的。在这里,我们使用 `SortedSet` 对象来存储 `Student` 对象,并通过 `key` 参数指定按照学生姓名长度排序。
希望这个代码能够满足您的需求。如果您有任何其他问题,请随时问我。
阅读全文