imageFile이라는 사용자 정의 클래스가 있고이 클래스에 두 가지 속성이 있다고 가정하겠습니다.
class imageFile {
var fileName = String()
var fileID = Int()
}
배열에 많이 저장
var images : Array = []
var aImage = imageFile()
aImage.fileName = "image1.png"
aImage.fileID = 101
images.append(aImage)
aImage = imageFile()
aImage.fileName = "image1.png"
aImage.fileID = 202
images.append(aImage)
질문은 : 어떻게 ‘fileID’ASC 또는 DESC로 이미지 배열을 정렬 할 수 있습니까?
답변
먼저 배열을 유형이 지정된 배열로 선언하면 반복 할 때 메소드를 호출 할 수 있습니다.
var images : [imageFile] = []
그런 다음 간단하게 수행 할 수 있습니다.
스위프트 2
images.sorted({ $0.fileID > $1.fileID })
스위프트 3+
images.sorted(by: { $0.fileID > $1.fileID })
위의 예는 desc 정렬 순서를 제공합니다
답변
[ sort (by :)를 사용하여 Swift 3 용으로 업데이트 됨 ] 후행 클로저를 활용합니다.
images.sorted { $0.fileID < $1.fileID }
ASC 또는 DESC 각각에 따라 <
또는 사용 >
합니다. 배열 을 수정하려면images
다음을 사용하십시오.
images.sort { $0.fileID < $1.fileID }
이 작업을 반복적으로 수행하고 함수 정의를 선호하는 경우 한 가지 방법은 다음과 같습니다.
func sorterForFileIDASC(this:imageFile, that:imageFile) -> Bool {
return this.fileID > that.fileID
}
다음으로 사용하십시오.
images.sort(by: sorterForFileIDASC)
답변
거의 모든 사람들이 어떻게 직접적으로 진화를 보여줄 수 있는지 알려줍니다.
Array의 인스턴스 메소드를 사용할 수 있습니다.
// general form of closure
images.sortInPlace({ (image1: imageFile, image2: imageFile) -> Bool in return image1.fileID > image2.fileID })
// types of closure's parameters and return value can be inferred by Swift, so they are omitted along with the return arrow (->)
images.sortInPlace({ image1, image2 in return image1.fileID > image2.fileID })
// Single-expression closures can implicitly return the result of their single expression by omitting the "return" keyword
images.sortInPlace({ image1, image2 in image1.fileID > image2.fileID })
// closure's argument list along with "in" keyword can be omitted, $0, $1, $2, and so on are used to refer the closure's first, second, third arguments and so on
images.sortInPlace({ $0.fileID > $1.fileID })
// the simplification of the closure is the same
images = images.sort({ (image1: imageFile, image2: imageFile) -> Bool in return image1.fileID > image2.fileID })
images = images.sort({ image1, image2 in return image1.fileID > image2.fileID })
images = images.sort({ image1, image2 in image1.fileID > image2.fileID })
images = images.sort({ $0.fileID > $1.fileID })
정렬의 작동 원리에 대한 자세한 설명은 정렬 함수를 참조하십시오 .
답변
스위프트 3
people = people.sorted(by: { $0.email > $1.email })
답변
Swift 5 Array
에는 sorted()
and 라는 두 가지 메소드가 sorted(by:)
있습니다. 첫 번째 방법 sorted()
은 다음과 같은 선언입니다.
컬렉션의 요소를 정렬하여 반환합니다.
func sorted() -> [Element]
두 번째 방법 sorted(by:)
은 다음과 같은 선언입니다.
주어진 술어를 요소 간의 비교로 사용하여 정렬 된 콜렉션의 요소를 리턴합니다.
func sorted(by areInIncreasingOrder: (Element, Element) throws -> Bool) rethrows -> [Element]
#1. 비교 가능한 객체에 대해 오름차순으로 정렬
컬렉션 내의 요소 유형이 Comparable
프로토콜을 따르는 경우 sorted()
요소를 오름차순으로 정렬하는 데 사용할 수 있습니다 . 다음 놀이터 코드는 사용 방법을 보여줍니다 sorted()
.
class ImageFile: CustomStringConvertible, Comparable {
let fileName: String
let fileID: Int
var description: String { return "ImageFile with ID: \(fileID)" }
init(fileName: String, fileID: Int) {
self.fileName = fileName
self.fileID = fileID
}
static func ==(lhs: ImageFile, rhs: ImageFile) -> Bool {
return lhs.fileID == rhs.fileID
}
static func <(lhs: ImageFile, rhs: ImageFile) -> Bool {
return lhs.fileID < rhs.fileID
}
}
let images = [
ImageFile(fileName: "Car", fileID: 300),
ImageFile(fileName: "Boat", fileID: 100),
ImageFile(fileName: "Plane", fileID: 200)
]
let sortedImages = images.sorted()
print(sortedImages)
/*
prints: [ImageFile with ID: 100, ImageFile with ID: 200, ImageFile with ID: 300]
*/
# 2. 비슷한 객체에 대해 내림차순으로 정렬
컬렉션 내의 요소 유형이 Comparable
프로토콜을 따르는 경우 sorted(by:)
요소를 내림차순으로 정렬하려면 사용해야 합니다.
class ImageFile: CustomStringConvertible, Comparable {
let fileName: String
let fileID: Int
var description: String { return "ImageFile with ID: \(fileID)" }
init(fileName: String, fileID: Int) {
self.fileName = fileName
self.fileID = fileID
}
static func ==(lhs: ImageFile, rhs: ImageFile) -> Bool {
return lhs.fileID == rhs.fileID
}
static func <(lhs: ImageFile, rhs: ImageFile) -> Bool {
return lhs.fileID < rhs.fileID
}
}
let images = [
ImageFile(fileName: "Car", fileID: 300),
ImageFile(fileName: "Boat", fileID: 100),
ImageFile(fileName: "Plane", fileID: 200)
]
let sortedImages = images.sorted(by: { (img0: ImageFile, img1: ImageFile) -> Bool in
return img0 > img1
})
//let sortedImages = images.sorted(by: >) // also works
//let sortedImages = images.sorted { $0 > $1 } // also works
print(sortedImages)
/*
prints: [ImageFile with ID: 300, ImageFile with ID: 200, ImageFile with ID: 100]
*/
#삼. 비교할 수없는 객체의 오름차순 또는 내림차순으로 정렬
컬렉션 내의 요소 유형이 Comparable
프로토콜을 준수하지 않으면 sorted(by:)
요소를 오름차순 또는 내림차순으로 정렬하기 위해 사용해야 합니다.
class ImageFile: CustomStringConvertible {
let fileName: String
let fileID: Int
var description: String { return "ImageFile with ID: \(fileID)" }
init(fileName: String, fileID: Int) {
self.fileName = fileName
self.fileID = fileID
}
}
let images = [
ImageFile(fileName: "Car", fileID: 300),
ImageFile(fileName: "Boat", fileID: 100),
ImageFile(fileName: "Plane", fileID: 200)
]
let sortedImages = images.sorted(by: { (img0: ImageFile, img1: ImageFile) -> Bool in
return img0.fileID < img1.fileID
})
//let sortedImages = images.sorted { $0.fileID < $1.fileID } // also works
print(sortedImages)
/*
prints: [ImageFile with ID: 300, ImageFile with ID: 200, ImageFile with ID: 100]
*/
스위프트는 또한라는 두 가지 방법을 제공합니다 sort()
과 sort(by:)
의 대응으로 sorted()
하고 sorted(by:)
경우에 당신이 자리에서 컬렉션을 정렬 할 필요가있다.
답변
스위프트 3.0
images.sort(by: { (first: imageFile, second: imageFile) -> Bool in
first. fileID < second. fileID
})
답변
당신은 또한 같은 것을 할 수 있습니다
images = sorted(images) {$0.fileID > $1.fileID}
따라서 이미지 배열은 정렬 된 것으로 저장됩니다