我正在尝试根据可选Int属性对对象数组进行排序。
// sorting each language array based on most stars
groupedDictionariesValueUnwrapped.sort(by: { $0.stars! > $1.stars! })
数组的类型为[SingleRepository],SingleRepository具有可选的Int。星:Int?
如何避免在排序内部强行展开?
答案 0 :(得分:6)
您正在按降序排序。
使用 nil合并运算符 ??
安全地解包值,并将nil
替换为Int.min
,以将项目放置在数组的末尾:< / p>
// sorting each language array based on most stars
groupedDictionariesValueUnwrapped.sort(by: { ($0.stars ?? Int.min) > ($1.stars ?? Int.min) })
或使用?? Int.max
将其放在开头。
答案 1 :(得分:1)
如果对您的类/结构有意义,则可以将Comparable
的符合性添加到要排序的类型:
extension MyClass: Comparable {
public static func ==(lhs: MyClass, rhs: MyClass) -> Bool {
return (lhs.stars ?? 0) == (rhs.stars ?? 0)
}
public static func <(lhs: MyClass, rhs: MyClass) -> Bool {
return (lhs.stars ?? 0) < (rhs.stars ?? 0)
}
}
然后您就可以直接使用>
运算符功能(符合Comparable
会调出所有其他比较运算符>
,>=
,{{1} }):
<=
“有道理”是指基于groupedDictionariesValueUnwrapped.sort(by: >)
属性符合Comparable
的事实,为类型定义增加了价值(例如,类型命名为stars
包含有关用户评论的信息。