วิธีการเรียงลำดับอาร์เรย์ของวัตถุที่กำหนดเองอย่างรวดเร็วตามค่าคุณสมบัติ


521

สมมติว่าเรามีคลาสที่กำหนดเองชื่อ imageFile และคลาสนี้มีคุณสมบัติสองอย่าง

class imageFile  {
    var fileName = String()
    var fileID = Int()
}

จำนวนมากถูกเก็บไว้ใน Array

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 ได้อย่างไร


จัดเรียงโดย KeyPath stackoverflow.com/a/46601105/2303865
Leo Dabus

คำตอบ:


941

ขั้นแรกให้ประกาศ Array ของคุณเป็นอาร์เรย์ที่พิมพ์เพื่อให้คุณสามารถเรียกใช้เมธอดได้เมื่อคุณทำซ้ำ:

var images : [imageFile] = []

จากนั้นคุณสามารถทำได้:

สวิฟท์ 2

images.sorted({ $0.fileID > $1.fileID })

Swift 3+

images.sorted(by: { $0.fileID > $1.fileID })

ตัวอย่างข้างต้นจะช่วยให้เรียงลำดับการจัดเรียง


1
ฉันหายไปส่วนประกาศอาร์เรย์มันทำเคล็ดลับอาร์เรย์ <imageFile>
mohacs

1
@AlexWayne ฉันมีNSManagedObjectsubclass เรียกCheckInAndOut และในไฟล์ที่แยกต่างหากฉันได้ประกาศอาเรย์ที่พิมพ์สำหรับวัตถุประเภทนี้และเมื่อฉันพยายามที่จะเรียงลำดับฉันได้รับ a ไม่พบข้อผิดพลาดของสมาชิก ความคิดใดว่าทำไมนี่คือ?
Isuru

3
ฉันพบปัญหาของฉัน เห็นได้ชัดว่าอาร์เรย์ไม่ใช่อาร์เรย์ที่พิมพ์ อย่างไรก็ตามฉันมีปัญหาใหม่ ฉันจะเรียงลำดับอาร์เรย์ตามคุณสมบัติหลาย ๆ ได้อย่างไร ว่าฉันมี 2 คุณสมบัติเหมือนfirstNameและlastNameในอาร์เรย์ของPersonวัตถุ ครั้งแรกที่ฉันต้องการเรียงลำดับได้โดยการแล้วfirstName lastNameฉันจะทำสิ่งนี้ได้อย่างไร
Isuru

12
ตอนนี้คุณต้องทำimages.sortInPlace({ $0.fileID > $1.fileID })อะไร
เทย์เลอร์ M

13
ในกรณีที่ใคร ๆ ก็สงสัยเหมือนกัน: คำตอบจะให้เรียงลำดับ
Danny Wang

223

[ อัปเดตสำหรับ 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)

ฉันจะฟ้องด้วยสตริงได้อย่างไร ฉันต้องการเรียงสตริงตามความยาวของมัน
Muneef M

@MuneefM เพิ่งกลับมา string1.length <string2.length
Surjeet Rajput

sortไม่คอมไพล์ด้วยไวยากรณ์นี้ใน Xcode 8 Xcode 8 กล่าวว่า$0.fileID < $1.fileIDสร้าง Bool ไม่ใช่ ComparResult
Crashalot

3
รหัสของคำตอบนี้ทำงานได้ดีใน Xcode8; หากคุณมีข้อผิดพลาดให้โพสต์คำถามใหม่
GoZoner

ฉันสามารถใช้สิ่งนี้เพื่อเรียงลำดับโดยการเปรียบเทียบเช่นมีอาร์เรย์เรียงตามวันในสัปดาห์หรือไม่ ถ้าเป็นเช่นนั้นได้อย่างไร
Kristofer

53

เกือบทุกคนให้วิธีโดยตรงฉันขอแสดงวิวัฒนาการ:

คุณสามารถใช้วิธีการตัวอย่างของ 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 })

สำหรับคำอธิบายอย่างละเอียดเกี่ยวกับหลักการทำงานของการจัดเรียงให้ดูเรียงฟังก์ชั่น


ฉันสามารถใช้สิ่งนี้เพื่อเรียงลำดับโดยการเปรียบเทียบเช่นมีอาร์เรย์เรียงตามวันในสัปดาห์หรือไม่ ถ้าเป็นเช่นนั้นได้อย่างไร
Kristofer

ขอบคุณสำหรับการโพสต์คำตอบที่แสดงให้เห็นว่าการปิดทำงานแทนผู้อ่านที่เข้าใจไวยากรณ์ที่เป็นความลับของการปิด "แบบง่าย"!
user1118321

50

สวิฟท์ 3

people = people.sorted(by: { $0.email > $1.email })

ฉันลองสิ่งนี้ด้วยการเปรียบเทียบวันที่ไม่สามารถทำงานได้ ความคิดใด ๆ
Ebru Güngör

ไม่ใช่ NSDate หรือ String วัตถุ swift 3 Date ปัจจุบัน
Ebru Güngör

คุณเปรียบเทียบคุณสมบัติของวันไหน คุณสมบัติจะต้องสามารถเปรียบเทียบกับฟังก์ชั่นที่ใช้ (มากกว่าในตัวอย่างของฉัน)
quemeful

9
นี่เป็นคำตอบที่มีประโยชน์สำหรับปี 2017 เป็นต้นไป
Fattie

@Fattie คุณหมายถึงอะไร ไวยากรณ์ที่ถูกต้องคือpeople.sort { $0.email > $1.email }
Leo Dabus

43

กับสวิฟท์ 5 Arrayมีสองวิธีที่เรียกว่าและsorted() 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]
 */

# 3 เรียงลำดับจากน้อยไปมากหรือมากไปหาน้อยสำหรับวัตถุที่ไม่สามารถเทียบเคียงได้

หากประเภทองค์ประกอบภายในคอลเลกชันของคุณไม่สอดคล้องกับ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]
 */

โปรดทราบว่า Swift ยังมีวิธีการสองวิธีที่เรียกว่าsort()และsort(by:)เป็นคู่หูของsorted()และsorted(by:)ถ้าคุณต้องการเรียงลำดับคอลเลกชันของคุณในสถานที่



20

คุณสามารถทำสิ่งที่ชอบ

images = sorted(images) {$0.fileID > $1.fileID}

ดังนั้นอาร์เรย์รูปภาพของคุณจะถูกจัดเก็บเป็นเรียง


19

Swift 2 ถึง 4

คำตอบเดิมพยายามจัดเรียงอาร์เรย์ของวัตถุที่กำหนดเองโดยใช้คุณสมบัติบางอย่าง ด้านล่างฉันจะแสดงให้คุณเห็นวิธีที่สะดวกในการทำพฤติกรรมแบบเดียวกันกับโครงสร้างข้อมูลที่รวดเร็ว!

สิ่งเล็ก ๆ น้อย ๆ ทำให้ฉันเปลี่ยน ImageFile ได้เล็กน้อย โดยที่ในใจฉันสร้างอาร์เรย์ด้วยไฟล์ภาพสามไฟล์ ขอให้สังเกตว่าเมตาดาต้าเป็นค่าตัวเลือกผ่านในศูนย์ตามที่คาดว่าพารามิเตอร์

 struct ImageFile {
      var name: String
      var metadata: String?
      var size: Int
    }

    var images: [ImageFile] = [ImageFile(name: "HelloWorld", metadata: nil, size: 256), ImageFile(name: "Traveling Salesmen", metadata: "uh this is huge", size: 1024), ImageFile(name: "Slack", metadata: "what's in this stuff?", size: 2048) ]

ImageFile มีคุณสมบัติชื่อขนาด สำหรับตัวอย่างต่อไปนี้ฉันจะแสดงวิธีใช้การดำเนินการเรียงลำดับที่มีคุณสมบัติเช่นขนาด

เล็กที่สุดถึงใหญ่ที่สุด (<)

    let sizeSmallestSorted = images.sorted { (initial, next) -> Bool in
      return initial.size < next.size
    }

มากไปน้อยที่สุด (>)

    let sizeBiggestSorted = images.sorted { (initial, next) -> Bool in
      return initial.size > next.size
    }

ต่อไปเราจะจัดเรียงโดยใช้ชื่อคุณสมบัติสตริง ในทำนองเดียวกันใช้ sort เพื่อเปรียบเทียบสตริง แต่สังเกตว่าบล็อกด้านในส่งคืนผลลัพธ์การเปรียบเทียบ ผลลัพธ์นี้จะกำหนดการเรียงลำดับ

AZ (.orderedAscending)

    let nameAscendingSorted = images.sorted { (initial, next) -> Bool in
      return initial.name.compare(next.name) == .orderedAscending
    }

ZA (.orderedDescending)

    let nameDescendingSorted = images.sorted { (initial, next) -> Bool in
      return initial.name.compare(next.name) == .orderedDescending
    }

ถัดไปเป็นวิธีที่ฉันชอบในการเรียงลำดับในหลายกรณีหนึ่งจะมีคุณสมบัติที่เป็นตัวเลือก ตอนนี้ไม่ต้องกังวลเราจะจัดเรียงในลักษณะเดียวกันกับข้างบนยกเว้นว่าเราต้องจัดการไม่มี! ในการผลิต

ฉันใช้รหัสนี้เพื่อบังคับให้อินสแตนซ์ทั้งหมดในอาร์เรย์ของฉันด้วยค่าคุณสมบัติศูนย์จะเป็นครั้งสุดท้าย จากนั้นสั่งซื้อเมทาดาทาโดยใช้ค่าที่ไม่ได้คาดไว้

    let metadataFirst = images.sorted { (initial, next) -> Bool in
      guard initial.metadata != nil else { return true }
      guard next.metadata != nil else { return true }
      return initial.metadata!.compare(next.metadata!) == .orderedAscending
    }

เป็นไปได้ที่จะมีการเรียงลำดับที่สองสำหรับตัวเลือก ตัวอย่างเช่น; หนึ่งสามารถแสดงภาพที่มีข้อมูลเมตาและจัดเรียงตามขนาด


1
โดยทั่วไปแล้วคำตอบจะมีประโยชน์มากขึ้นหากพวกเขามีคำอธิบายว่าควรใช้รหัสใดและเหตุใดจึงแก้ปัญหาได้โดยไม่ต้องแนะนำผู้อื่น
Tom Aranda

ดีกว่ามาก
Tom Aranda

18

สองทางเลือก

1) การสั่งซื้ออาร์เรย์เดิมด้วย sortInPlace

self.assignments.sortInPlace({ $0.order < $1.order })
self.printAssignments(assignments)

2) การใช้อาร์เรย์ทางเลือกเพื่อจัดเก็บอาร์เรย์ที่สั่งซื้อ

var assignmentsO = [Assignment] ()
assignmentsO = self.assignments.sort({ $0.order < $1.order })
self.printAssignments(assignmentsO)

3
2) อะไรคือจุดในการสร้างอาเรย์ที่ว่างเปล่าและทิ้งมันไว้ในบรรทัดถัดไป ฉันอยากใช้var assignmentsO : [Assignment]หรือรวมมันเป็นหนึ่งบรรทัดโดยใช้let assignmentsO = self.assignments.sort({ $0.order < $1.order })
Hermann Klecker

2
สวัสดีแฮร์มันน์! มีเส้นบาง ๆ ระหว่างการเขียนโค้ดที่อ่านได้และมีประสิทธิภาพ ในกรณีนี้จุดเดียวคือทำให้ชุมชนอ่านได้ง่ายขึ้น;) สนุกได้เลย!
Bernauer

18

Swift 4.0, 4.1 และ 4.2 ก่อนอื่นฉันสร้างอาร์เรย์ประเภท imageFile () ที่ไม่แน่นอนดังที่แสดงด้านล่าง

var arr = [imageFile]()

สร้างภาพออบเจ็กต์ที่ไม่แน่นอนของประเภท imageFile () และกำหนดค่าให้กับคุณสมบัติดังที่แสดงด้านล่าง

   var image = imageFile()
   image.fileId = 14
   image.fileName = "A"

ตอนนี้ผนวกวัตถุนี้เพื่ออาร์เรย์อาร์เรย์

    arr.append(image)

ตอนนี้กำหนดคุณสมบัติที่แตกต่างให้กับวัตถุที่ไม่แน่นอนเช่นภาพ

   image = imageFile()
   image.fileId = 13
   image.fileName = "B"

ทีนี้ให้เพิ่มอิมเมจออบเจ็กต์อีกครั้งลงในอาร์เรย์อาเรย์

    arr.append(image)

ตอนนี้เราจะใช้ลำดับจากน้อยไปหามากในคุณสมบัติfileIdในอาร์เรย์ arr objects ใช้<สัญลักษณ์เพื่อเรียงลำดับ

 arr = arr.sorted(by: {$0.fileId < $1.fileId}) // arr has all objects in Ascending order
 print("sorted array is",arr[0].fileId)// sorted array is 13
 print("sorted array is",arr[1].fileId)//sorted array is 14

ตอนนี้เราจะใช้ลำดับมากไปน้อยในคุณสมบัติfileIdในอาร์เรย์ arr objects ใช้สัญลักษณ์>สำหรับลำดับมากไปน้อย

 arr = arr.sorted(by: {$0.fileId > $1.fileId}) // arr has all objects in Descending order
 print("Unsorted array is",arr[0].fileId)// Unsorted array is 14
 print("Unsorted array is",arr[1].fileId)// Unsorted array is 13

ใน Swift 4.1 & 4.2 สำหรับการใช้งานเรียงลำดับ

let sortedArr = arr.sorted { (id1, id2) -> Bool in
  return id1.fileId < id2.fileId // Use > for Descending order
}

8

หากคุณกำลังจะเรียงลำดับอาเรย์นี้มากกว่าหนึ่งแห่งมันอาจสมเหตุสมผลที่จะทำให้อาเรย์ของคุณเปรียบเทียบได้

class MyImageType: Comparable, Printable {
    var fileID: Int

    // For Printable
    var description: String {
        get {
            return "ID: \(fileID)"
        }
    }

    init(fileID: Int) {
        self.fileID = fileID
    }
}

// For Comparable
func <(left: MyImageType, right: MyImageType) -> Bool {
    return left.fileID < right.fileID
}

// For Comparable
func ==(left: MyImageType, right: MyImageType) -> Bool {
    return left.fileID == right.fileID
}

let one = MyImageType(fileID: 1)
let two = MyImageType(fileID: 2)
let twoA = MyImageType(fileID: 2)
let three = MyImageType(fileID: 3)

let a1 = [one, three, two]

// return a sorted array
println(sorted(a1)) // "[ID: 1, ID: 2, ID: 3]"

var a2 = [two, one, twoA, three]

// sort the array 'in place'
sort(&a2)
println(a2) // "[ID: 1, ID: 2, ID: 2, ID: 3]"

6

หากคุณไม่ได้ใช้วัตถุที่กำหนดเอง แต่เป็นประเภทของค่าที่ใช้โปรโตคอล Comparable (Int, String ฯลฯ .. ) คุณสามารถทำได้ดังนี้

myArray.sort(>) //sort descending order

ตัวอย่าง:

struct MyStruct: Comparable {
    var name = "Untitled"
}

func <(lhs: MyStruct, rhs: MyStruct) -> Bool {
    return lhs.name < rhs.name
}
// Implementation of == required by Equatable
func ==(lhs: MyStruct, rhs: MyStruct) -> Bool {
    return lhs.name == rhs.name
}

let value1 = MyStruct()
var value2 = MyStruct()

value2.name = "A New Name"

var anArray:[MyStruct] = []
anArray.append(value1)
anArray.append(value2)

anArray.sort(>) // This will sort the array in descending order

ใน swift 3 itmyArray.sorted(by: >)
beryllium

6

คุณส่งคืนอาร์เรย์ที่เรียงลำดับจากคุณสมบัติ fileID โดยใช้วิธีต่อไปนี้:

สวิฟท์ 2

let sortedArray = images.sorted({ $0.fileID > $1.fileID })

Swift 3 หรือ 4

let sortedArray = images.sorted(by: { $0.fileID > $1.fileID })

สวิฟท์ 5.0

let sortedArray = images.sorted {
    $0.fileID < $1.fileID
}

ทำงานเหมือนมีเสน่ห์ .. upvoted! (Pratik Prajapati, Ahmedabad)
NSPratik


2

หากคุณต้องการเรียงลำดับวัตถุดั้งเดิมที่กำหนดเอง นี่เป็นอีกวิธีในการทำเช่นนั้นใน Swift 2.1

var myCustomerArray = [Customer]()
myCustomerArray.sortInPlace {(customer1:Customer, customer2:Customer) -> Bool in
    customer1.id < customer2.id
}

idInteger อยู่ที่ไหน คุณสามารถใช้ตัว<ดำเนินการเดียวกันสำหรับStringคุณสมบัติได้เช่นกัน

คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับการใช้งานได้โดยดูตัวอย่างที่นี่: Swift2: ลูกค้าใกล้เคียง



1

สวิฟต์ 3 และ 4 และ 5

ฉันมีปัญหาเกี่ยวกับตัวพิมพ์เล็กและตัวพิมพ์ใหญ่

ดังนั้นฉันทำรหัสนี้

let sortedImages = images.sorted(by: { $0.fileID.lowercased() < $1.fileID.lowercased() })

แล้วใช้ sortImages หลังจากนั้น


0

จัดเรียงโดยใช้ KeyPath

คุณสามารถเรียงลำดับKeyPathดังนี้:

myArray.sorted(by: \.fileName, <) /* using `<` for ascending sorting */

โดยการใช้ส่วนขยายที่เป็นประโยชน์เล็กน้อยนี้

extension Collection{
    func sorted<Value: Comparable>(
        by keyPath: KeyPath<Element, Value>,
        _ comparator: (_ lhs: Value, _ rhs: Value) -> Bool) -> [Element] {
        sorted { comparator($0[keyPath: keyPath], $1[keyPath: keyPath]) }
    }
}

Hope Swift เพิ่มสิ่งนี้ในอนาคตอันใกล้ในแกนกลางของภาษา


นี่เป็นคำตอบแล้วที่นี่stackoverflow.com/a/46601105/2303865 พร้อมกับวิธีการกลายพันธุ์เช่นกัน
Leo Dabus

รุ่นกลายพันธุ์public extension MutableCollection where Self: RandomAccessCollection { mutating func sort<T>(_ keyPath: KeyPath<Element, T>, by areInIncreasingOrder: (T, T) throws -> Bool) rethrows where T: Comparable { try sort { try areInIncreasingOrder($0[keyPath: keyPath], $1[keyPath: keyPath]) } }}
Leo Dabus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.