回答:
に渡すクロージャでsort
、並べ替えに使用するプロパティを比較します。このような:
movieArr.sorted { $0.name < $1.name }
または、ケースをバイパスする場合は次のようにします。
movieArr.sorted { $0.name.lowercased() < $1.name.lowercased() }
補足:通常、タイプは大文字で始まるだけです。name
and date
ではなくName
and を使用することをお勧めしDate
ます。
例、遊び場で:
class Movie {
let name: String
var date: Int?
init(_ name: String) {
self.name = name
}
}
var movieA = Movie("A")
var movieB = Movie("B")
var movieC = Movie("C")
let movies = [movieB, movieC, movieA]
let sortedMovies = movies.sorted { $0.name < $1.name }
sortedMovies
sortedMovies
順序になります [movieA, movieB, movieC]
Swift5アップデート
channelsArray = channelsArray.sorted { (channel1, channel2) -> Bool in
let channelName1 = channel1.name
let channelName2 = channel2.name
return (channelName1.localizedCaseInsensitiveCompare(channelName2) == .orderedAscending)
.lowercaseString
この問題は解決します。
sorted
再びSwift 3にあることに注意してください:D。
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
}
}
使用法:
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]
*/
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
}
}
使用法:
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]
*/
sorted()
したMovie
クラスで使用Comparable
するあなたにすることによってMovie
、クラスが準拠Comparable
のプロトコルには、アレイの使用可能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
}
}
使用法:
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]
*/
movies.sorted(by: <)
とmovies.sorted()
)?
sorted(by:)
とsorted()
は2つの異なる方法です。のarray.sorted()
代替として使用できますarray.sorted(by: <)
。
sorted(by:)
とsorted()
?
Comparable
ます。どの実装でも、プロトコルに準拠する必要があります。
"1" "14""28""31""4""42""49"
let sortArray = array.sorted(by: { $0.name.lowercased() < $1.name.lowercased() })
*import Foundation
import CoreData
extension Messages {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Messages> {
return NSFetchRequest<Messages>(entityName: "Messages")
}
@NSManaged public var text: String?
@NSManaged public var date: Date?
@NSManaged public var friends: Friends?
}
//here arrMessage is the array you can sort this array as under bellow
var arrMessages = [Messages]()
arrMessages.sort { (arrMessages1, arrMessages2) -> Bool in
arrMessages1.date! > arrMessages2.date!
}*