在 Swift 中按属性对类或结构数组进行排序的通用函数 [英] Generic function to sort array of class or struct by properties in Swift
本文介绍了在 Swift 中按属性对类或结构数组进行排序的通用函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想创建一个通用函数来根据传递的属性对类数组进行排序.
I want to create a generic function to sort an array of classes based on a property passed.
例如,我有这些类
public class Car {
var id: Int
var manufacturer: String
var variant: String
init(id: Int, manufacturer: String, variant: String) {
self.id = id
self.manufacturer = manufacturer
self.variant = variant
}
}
enum Gender {
case male
case female
}
public class Person {
var id: Int
var name: String
var age: Int
var gender: Gender
init(id: Int, name: String, age: Int, gender: Gender) {
self.id = id
self.name = name
self.age = age
self.gender = gender
}
}
还有这些数组,
let cars = [
Car(id: 1, manufacturer: "Ford", variant: "Focus"),
Car(id: 2, manufacturer: "Nissan", variant: "Skyline"),
Car(id: 3, manufacturer: "Dodge", variant: "Charger"),
Car(id: 4, manufacturer: "Chevrolet", variant: "Camaro"),
Car(id: 5, manufacturer: "Ford", variant: "Shelby")
]
let persons = [
Person(id: 1, name: "Ed Sheeran", age: 26, gender: .male),
Person(id: 2, name: "Phil Collins", age: 66, gender: .male),
Person(id: 3, name: "Shakira", age: 40, gender: .female),
Person(id: 4, name: "Rihanna", age: 25, gender: .female),
Person(id: 5, name: "Bono", age: 57, gender: .male)
]
如何为数组编写通用扩展,根据传递的属性对其进行排序?(例如persons.sort(name) 或cars.sort(manufacturer))
How to write a generic extension for the array, to sort it based on the property passed? (eg. persons.sort(name) or cars.sort(manufacturer))
谢谢!
推荐答案
给你:
extension Array {
mutating func propertySort<T: Comparable>(_ property: (Element) -> T) {
sort(by: { property($0) < property($1) })
}
}
用法:
persons.propertySort({$0.name})
这是一个非变异版本:
func propertySorted<T: Comparable>(_ property: (Element) -> T) -> [Element] {
return sorted(by: {property($0) < property($1)})
}
正如 Leo Dabus 所指出的,你可以将扩展推广到任何 MutableCollection
,它也是一个 RandomAccessCollection
:
As Leo Dabus pointed out, you can generalise the extension to any MutableCollection
that is also a RandomAccessCollection
:
extension MutableCollection where Self : RandomAccessCollection {
...
这篇关于在 Swift 中按属性对类或结构数组进行排序的通用函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文