Jon*_*fer 121 arrays sorting ios swift
我有这个:
class Movies {
Name:String
Date:Int
}
Run Code Online (Sandbox Code Playgroud)
还有一组[电影].如何按名称按字母顺序对数组进行排序?我试过了:
movieArr = movieArr.sorted{ $0 < $1 }
和
movieArr = sorted(movieArr)
但这不起作用,因为我没有访问电影的名称属性.
Mik*_*e S 253
在传递给的闭包中sort
,比较要排序的属性.像这样:
movieArr.sorted { $0.name < $1.name }
Run Code Online (Sandbox Code Playgroud)
旁注:通常只有类型以大写字母开头; 我建议使用name
and date
,而不是Name
和Date
.
例如,在操场上:
movieArr.sorted { $0.name.lowercased() < $1.name.lowercased() }
Run Code Online (Sandbox Code Playgroud)
sortedMovies
将在订单中 [movieA, movieB, movieC]
Ima*_*tit 42
使用Swift 3,您可以选择以下方法之一来解决您的问题.
sorted(by:?)
具有Movie
不符合类Comparable
的协议如果您的Movie
类不符合Comparable
协议,则必须在闭包中指定您希望使用Array sorted(by:?)
方法的属性.
Movie
类声明:
import Foundation
class Movie: CustomStringConvertible {
let name: String
var date: Date
var description: String { return name }
init(name: String, date: Date = Date()) {
self.name = name
self.date = date
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
let avatarMovie = Movie(name: "Avatar")
let titanicMovie = Movie(name: "Titanic")
let piranhaMovie = Movie(name: "Piranha II: The Spawning")
let movies = [avatarMovie, titanicMovie, piranhaMovie]
let sortedMovies = movies.sorted(by: { $0.name < $1.name })
// let sortedMovies = movies.sorted { $0.name < $1.name } // also works
print(sortedMovies)
/*
prints: [Avatar, Piranha II: The Spawning, Titanic]
*/
Run Code Online (Sandbox Code Playgroud)
sorted(by:?)
的Movie
类Comparable
但是,通过使您的Movie
类符合Comparable
协议,当您想要使用Array的sorted(by:?)
方法时,您可以拥有一个非常简洁的代码.
Movie
类声明:
import Foundation
class Movie: CustomStringConvertible, Comparable {
let name: String
var date: Date
var description: String { return name }
init(name: String, date: Date = Date()) {
self.name = name
self.date = date
}
static func ==(lhs: Movie, rhs: Movie) -> Bool {
return lhs.name == rhs.name
}
static func <(lhs: Movie, rhs: Movie) -> Bool {
return lhs.name < rhs.name
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
let avatarMovie = Movie(name: "Avatar")
let titanicMovie = Movie(name: "Titanic")
let piranhaMovie = Movie(name: "Piranha II: The Spawning")
let movies = [avatarMovie, titanicMovie, piranhaMovie]
let sortedMovies = movies.sorted(by: { $0 < $1 })
// let sortedMovies = movies.sorted { $0 < $1 } // also works
// let sortedMovies = movies.sorted(by: <) // also works
print(sortedMovies)
/*
prints: [Avatar, Piranha II: The Spawning, Titanic]
*/
Run Code Online (Sandbox Code Playgroud)
sorted()
的Movie
类Comparable
通过使您的Movie
类符合Comparable
协议,您可以使用Array的sorted()
方法作为替代sorted(by:?)
.
Movie
类声明:
import Foundation
class Movie: CustomStringConvertible, Comparable {
let name: String
var date: Date
var description: String { return name }
init(name: String, date: Date = Date()) {
self.name = name
self.date = date
}
static func ==(lhs: Movie, rhs: Movie) -> Bool {
return lhs.name == rhs.name
}
static func <(lhs: Movie, rhs: Movie) -> Bool {
return lhs.name < rhs.name
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
let avatarMovie = Movie(name: "Avatar")
let titanicMovie = Movie(name: "Titanic")
let piranhaMovie = Movie(name: "Piranha II: The Spawning")
let movies = [avatarMovie, titanicMovie, piranhaMovie]
let sortedMovies = movies.sorted()
print(sortedMovies)
/*
prints: [Avatar, Piranha II: The Spawning, Titanic]
*/
Run Code Online (Sandbox Code Playgroud)
m.a*_*adi 14
let sortArray = array.sorted(by: { $0.name.lowercased() < $1.name.lowercased() })
Run Code Online (Sandbox Code Playgroud)
Jac*_*nig 13
对于那些使用Swift 3的人来说,接受答案的等效方法是:
movieArr.sorted { $0.Name < $1.Name }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
98709 次 |
最近记录: |