Menu
Coddy logo textTech

sorted(by:)

Coddy'nin Swift Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 30 / 56.

Sayılar veya dizeler gibi Comparable değer dizilerinde .sorted() yöntemini kullandınız. Başka bir şeye göre sıralamak istediğinizde, iki öğe alan ve birincinin ikinciden önce gelmesi gerektiğinde true döndüren bir closure sağlayın.

let words = ["banana", "hi", "hello"]
let byLength = words.sorted { $0.count < $1.count }
print(byLength)              // ["hi", "hello", "banana"]

Azalan sıralama için karşılaştırmayı değiştirin:

let down = words.sorted { $0.count > $1.count }
print(down)                  // ["banana", "hello", "hi"]

Closure; türetilmiş herhangi bir değeri, uzunluğu, son harfi veya bir hash içindeki bir girdiyi karşılaştırabilir. Closure'ın neyi karşılaştırdığı, sıralamayı belirler.

min(by:) ve max(by:) aynı şekilde çalışır ancak sıralanmış bir kopya yerine tek bir isteğe bağlı (optional) öğe döndürür.

challenge icon

Görev

Orta

Tek bir giriş satırı okuyun: virgülle ayrılmış name:age çiftlerinden oluşan bir liste.

Üç satır yazdırın:

  1. Yaşa göre artan sırada sıralanmış, , ile birleştirilmiş isimler. Eşitlik durumunda, eşit olan isimleri alfabetik olarak sıralayarak durumu çözün.
  2. En yaşlı kişinin adı (max(by:) kullanın). Eşitlik durumunda, ilk görünen kazanır.
  3. En genç kişinin adı (min(by:) kullanın). Eşitlik durumunda, ilk görünen kazanır.

alice:30,bob:22,cara:30,dan:18 girişi için çıktı şöyledir:

dan,bob,alice,cara
alice
dan

Kopya kağıdı

Herhangi bir türetilmiş değere göre sıralama yapmak için özel bir closure ile .sorted { } kullanın. Closure iki öğe alır ve birincinin ikinciden önce gelmesi gerektiğinde true döndürür:

let words = ["banana", "hi", "hello"]
let byLength = words.sorted { $0.count < $1.count }
// ["hi", "hello", "banana"]

Azalan düzen için operatörü değiştirin:

let down = words.sorted { $0.count > $1.count }
// ["banana", "hello", "hi"]

min(by:) ve max(by:) aynı closure imzasını kullanır ancak tek bir isteğe bağlı (optional) öğe döndürür:

let longest = words.max(by: { $0.count < $1.count })  // "banana"
let shortest = words.min(by: { $0.count < $1.count }) // "hi"

Kendin dene

let people = readLine()!.components(separatedBy: ",").map { pair -> (String, Int) in
    let parts = pair.components(separatedBy: ":")
    return (parts[0], Int(parts[1])!)
}

// YAPILACAK: yaşa göre artan sırada sırala (eşitlik durumunda isme göre); en yaşlı için max(by:); en genç için min(by:)
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık ve Akış bölümündeki tüm dersler