Swift: 객체 배열을 알파벳 순으로 정렬합니다.
이거 있어요.
class Movies {
Name:String
Date:Int
}
[무비] 시리즈도 있습니다.어레이를 이름순으로 정렬하려면 어떻게 해야 합니까?시도했습니다.
movieArr = movieArr.sorted{ $0 < $1 }
그리고.
movieArr = sorted(movieArr)
하지만 Movies의 이름 속성에 액세스하지 않기 때문에 작동하지 않습니다.
클로즈에서 다음 주소로 넘어갑니다.sort
정렬할 속성을 비교합니다.다음과 같이 합니다.
movieArr.sorted { $0.name < $1.name }
또는 다음과 같은 경우가 있습니다.
movieArr.sorted { $0.name.lowercased() < $1.name.lowercased() }
사이드노트:일반적으로 대문자로 시작하는 것은 유형뿐입니다.name
그리고.date
,것은 아니다.Name
그리고.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)
}
Swift 3 에서는, 다음의 몇개의 방법으로 문제를 해결할 수 있습니다.
1. 와의 사용Movie
준거하지 않는 클래스Comparable
프로토콜
만약 당신이Movie
클래스가 에 준거하지 않는다.Comparable
protocol은 어레이를 사용할 속성을 클로저에 지정해야 합니다.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]
*/
2. 와의 사용Movie
준거하는 계급Comparable
프로토콜
단, 고객님의Movie
계급에 준거하다Comparable
프로토콜, 어레이를 사용할 때 매우 간결한 코드를 사용할 수 있습니다.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]
*/
3. 와의 사용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]
*/
let sortArray = array.sorted(by: { $0.name.lowercased() < $1.name.lowercased() })
Swift 3을 사용하는 사용자에게는 다음과 같은 방법으로 답변할 수 있습니다.
movieArr.sorted { $0.Name < $1.Name }
이러한 답변의 대부분은 정렬에 로케일 기반 비교를 사용하지 못하기 때문에 올바르지 않습니다.localized Standard Compare()를 확인합니다.
정렬 어레이 Swift 4.2
arrayOfRaces = arrayOfItems.sorted(by: { ($0["raceName"] as! String) < ($1["raceName"] as! String) })
*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!
}*
언급URL : https://stackoverflow.com/questions/26719744/swift-sort-array-of-objects-alphabetically
'source' 카테고리의 다른 글
WPF WebBrowser 컨트롤을 사용할 때 스크립트 오류를 억제하려면 어떻게 해야 합니까? (0) | 2023.04.14 |
---|---|
목표 C에서 NSAray를 되돌리려면 어떻게 해야 하나요? (0) | 2023.04.09 |
이름 또는 유형별로 WPF 컨트롤을 찾으려면 어떻게 해야 합니까? (0) | 2023.04.09 |
ARC에서 항상 자신의 약한 참조를 블록에 전달하시겠습니까? (0) | 2023.04.09 |
IF 문: 조건이 false일 경우 셀을 공백으로 두는 방법("does not function") (0) | 2023.04.09 |