📌  相关文章
📜  如何对对象列表进行排序 python - TypeScript (1)

📅  最后修改于: 2023-12-03 14:53:01.388000             🧑  作者: Mango

如何对对象列表进行排序(Python 和 TypeScript)

在编程中,经常需要对对象列表进行排序。Python 和 TypeScript 都提供了相应的函数来实现这个功能。

Python
使用 sorted() 函数

sorted() 函数可以对列表进行排序,也支持对包含对象的列表进行排序。只需在调用 sorted() 函数时,指定排序的关键词参数为对象的某个属性即可。

class Person:
    def __init__(self, name: str, age: int):
        self.name = name
        self.age = age

people = [Person('Bob', 20), Person('Alice', 18), Person('Charlie', 25)]
sorted_people = sorted(people, key=lambda p: p.age)
print(sorted_people)

上面的代码输出结果为:

[<__main__.Person object at 0x7fd123ee7430>, <__main__.Person object at 0x7fd123ee74c0>, <__main__.Person object at 0x7fd123ee7490>]

这是因为 sorted() 函数默认使用对象的 repr() 方法来表示对象。如果想要输出对象的属性,可以修改 repr() 方法,例如:

class Person:
    def __init__(self, name: str, age: int):
        self.name = name
        self.age = age

    def __repr__(self):
        return f'{self.name} ({self.age})'

people = [Person('Bob', 20), Person('Alice', 18), Person('Charlie', 25)]
sorted_people = sorted(people, key=lambda p: p.age)
print(sorted_people)

输出结果为:

[Alice (18), Bob (20), Charlie (25)]
使用 sort() 方法

list 类型的 sort() 方法可以原地对列表排序,和 sorted() 函数类似,也支持对包含对象的列表进行排序。使用方法和 sorted() 函数基本一致:

class Person:
    def __init__(self, name: str, age: int):
        self.name = name
        self.age = age

    def __repr__(self):
        return f'{self.name} ({self.age})'

people = [Person('Bob', 20), Person('Alice', 18), Person('Charlie', 25)]
people.sort(key=lambda p: p.age)
print(people)

输出结果为:

[Alice (18), Bob (20), Charlie (25)]
TypeScript
使用 Array.sort() 方法

TypeScript 中的数组类型提供了 sort() 方法用于排序。和 Python 类似,只需指定排序的比较函数即可。

class Person {
  name: string
  age: number

  constructor(name: string, age: number) {
    this.name = name
    this.age = age
  }

  toString(): string {
    return `${this.name} (${this.age})`
  }
}

const people = [new Person('Bob', 20), new Person('Alice', 18), new Person('Charlie', 25)]
const sortedPeople = people.sort((a: Person, b: Person) => a.age - b.age)
console.log(sortedPeople)

输出结果为:

[
  Person { name: 'Alice', age: 18 },
  Person { name: 'Bob', age: 20 },
  Person { name: 'Charlie', age: 25 }
]

注意,TypeScript 中需要明确指定对象属性的类型(如上面的 (a: Person, b: Person))。

总结

无论是 Python 还是 TypeScript,实现对象列表的排序都很简单。只需要注意指定排序的关键词参数或比较函数即可。