chore: separate function

This commit is contained in:
2024-11-03 19:12:28 +08:00
parent 8781cf1c79
commit 4fc8f3ec39
+21 -8
View File
@@ -22,15 +22,30 @@ def sort_by_rule(data, sort_by, limit):
return sorted_data return sorted_data
def sort_limit(data, limit):
"""
排序和限制
[::reverse][:end]
"""
if limit is None:
end = len(data)
reverse = 1
else:
end = abs(limit)
reverse = 1 if limit > 0 else -1
return data[::reverse][:end]
def sort_by_time(data, limit=30): def sort_by_time(data, limit=30):
""" """
按时间排序 按时间排序
""" """
sorted_data = sorted(data, key=lambda x: x["time"], reverse=True) sorted_data = sorted(data, key=lambda x: x["time"], reverse=True)
return sorted_data[:limit] if limit > 0 else sorted_data[::-1][: abs(limit)] return sort_limit(sorted_data, limit)
def sort_by_id(data, limit=True): def sort_by_id(data, limit=None):
""" """
按学号排序,取对应的最高分,若分数相同则取最短运行时间 按学号排序,取对应的最高分,若分数相同则取最短运行时间
""" """
@@ -46,11 +61,7 @@ def sort_by_id(data, limit=True):
unique_students.append(score) unique_students.append(score)
unique_students_id_name.add(f"{score['name']}@{score["id"]}") unique_students_id_name.add(f"{score['name']}@{score["id"]}")
return unique_students[ return sort_limit(unique_students, limit)
: len(unique_students) if limit == True else abs(limit) : (
1 if limit > 0 else -1
)
]
def sort_by_score(data, limit=10): def sort_by_score(data, limit=10):
@@ -67,4 +78,6 @@ def sort_by_score(data, limit=10):
if student_id not in best_scores_by_id: if student_id not in best_scores_by_id:
best_scores_by_id[student_id] = score best_scores_by_id[student_id] = score
return list(best_scores_by_id.values())[:: 1 if limit > 0 else -1][: abs(limit)] scores = list(best_scores_by_id.values())
return sort_limit(scores, limit)