首页 > 社会 > 正文内容

Swift自定义对象数组排序实战指南

社会2025-05-27 20:38:37

浣犵洴鐫€灞忓箷涓婄殑鎶ラ敊淇℃伅鎶撹€虫尃鑵細"Type 'Student' does not conform to protocol 'Comparable'"锛熷埆鎱岋紒浠婂ぉ鍜变滑灏辨潵鎵嬫妸鎵嬬牬瑙h繖涓鏂版墜鍘熷湴瑁傚紑鐨勯毦棰樸€傚惉璇存湁浜轰负浜嗘悶鎳傝繖涓紝鍜栧暋閮藉枬鎴愮画鍛借嵂浜嗭紵锛堝伔鍋峰憡璇変綘锛屾枃鏈湁閬垮潙缁濇嫑锛?/p>


涓€銆佸厛鎼炴噦鍩烘湰鐢熷瓨鎶€鑳?/h3>

鍜卞厛鏉ョ湅涓湡瀹炴渚嬨€傚亣璁句綘姝e湪鍋氬鐢熺鐞嗙郴缁燂紝鎵嬮噷鏈変竴鍫嗚繖鏍风殑瀵硅薄锛?/p>

swift澶嶅埗
struct Student {
    var name: String
    var score: Int
    var birthday: Date
}

杩欐椂鍊欎骇鍝佺粡鐞嗘媿妗屽瓙瑕佷釜鎴愮哗鎺掕姒滐紝浣犺鍜嬪姙锛?/p>

鈥?strong>鈥嬮棴鍖呮帓搴忔硶鈥?/strong>鈥嬪氨鏄綘鐨勬€ユ晳鍖咃細

swift澶嶅埗
let students = [Student(...), Student(...)]
// 鎸夊垎鏁伴檷搴忔帓鍒?/span>
let ranked = students.sorted { $0.score > $1.score }

娉ㄦ剰鐪嬭繖涓澶存柟鍚戯紒鎴戜笂娆℃墜婊戝啓鎴?lt;锛岀粨鏋滄妸瀛︽福鎺掓垚瀛﹂湼锛屽樊鐐硅鐝富浠绘媺榛?..


浜屻€佽繘闃剁帺娉曪細璁╁璞¤嚜宸卞浼氭瘮杈?/h3>

杩欐椂鍊欐湁鍚屽瑕侀棶锛氭瘡娆¢兘瑕佸啓闂寘澶氶夯鐑﹀晩锛熻繖鏃跺€欏氨璇モ€?strong>鈥婥omparable鍗忚鈥?/strong>鈥嬩笂鍦轰簡銆傜粰Student鍔犱笂杩欐浠g爜锛?/p>

swift澶嶅埗
extension Student: Comparable {
    static func < (lhs: Self, rhs: Self) -> Bool {
        // 鍏堟瘮鍒嗘暟锛屽啀姣斿嚭鐢熸棩鏈?/span>
        if lhs.score != rhs.score {
            return lhs.score < rhs.score
        }
        return lhs.birthday < rhs.birthday
    }
}

鐜板湪鐩存帴璋冪敤sorted()灏辫兘鑷姩鎺掑簭锛?/p>

swift澶嶅埗
students.sorted() // 榛樿鍗囧簭
students.sorted(by: >) // 闄嶅簭

涓嶈繃瑕佹敞鎰忥紒鈥?strong>鈥嬪繀椤诲悓鏃跺疄鐜?=杩愮畻绗︹€?/strong>鈥嬶紝鍚﹀垯缂栬瘧鍣ㄤ細鐤媯鎶ラ敊銆傝繖涓潙鎴戝綋骞磋俯寰楅偅鍙竴涓摲瀹?..


闂寘鎺掑簭 vs Comparable鍗忚 鎬庝箞閫夛紵

杩欎釜闂灏卞儚閫夊璞♀€斺€斿緱鐪嬫儏鍐碉細

  • 鉁?鈥?strong>鈥嬩复鏃剁敤涓€娆$殑鎺掑簭鈥?/strong>鈥?鈫?闂寘
  • 鉁?鈥?strong>鈥嬮绻佷娇鐢ㄧ殑鎺掑簭瑙勫垯鈥?/strong>鈥?鈫?瀹炵幇鍗忚
  • 鉂?鈥?strong>鈥嬭鍔ㄦ€佸垏鎹㈡帓搴忚鍒欌€?/strong>鈥?鈫?闂寘+鍙傛暟鎺у埗
  • 鉂?鈥?strong>鈥嬮渶瑕佸瓨鍌ㄦ帓搴忕姸鎬佲€?/strong>鈥?鈫?鑷畾涔夋帓搴忓櫒

涓句釜鏍楀瓙锛氳鏄綘鐨凙PP鏃㈡湁"鎸夌儹搴︽帓搴?鍙堟湁"鎸夋椂闂存帓搴?鐨勫垏鎹㈡寜閽紝闂寘鎵嶆槸浣犵殑鐪熷懡澶╁瓙銆?/p>


涓夈€佸鏉′欢鎺掑簭鐨勯獨鎿嶄綔

浜у搧缁忕悊鍙堝嚭鏂伴渶姹傦細"鍒嗘暟鐩稿悓鐨勬寜骞撮緞鎺掞紝骞撮緞鐩稿悓鐨勬寜濮撳悕棣栧瓧姣嶆帓..." 杩欐椂鍊欏氨璇ョキ鍑衡€?strong>鈥嬪厓缁勬瘮杈冩硶鈥?/strong>鈥嬶細

swift澶嶅埗
students.sorted {
    ($0.score, $0.birthday, $1.name) > 
    ($1.score, $1.birthday, $0.name)
} 

杩欎釜鍐欐硶鏄笉鏄緢榄旀€э紵鈥?strong>鈥婼wift浼氭寜鍏冪粍鍏冪礌椤哄簭閫愪釜姣旇緝鈥?/strong>鈥嬶紝浣嗚娉ㄦ剰涓夌偣锛?/p>

  1. 鎵€鏈夊睘鎬ч兘蹇呴』鍙瘮杈?/li>
  2. 鏃ユ湡瑕佽浆鎴怐ate绫诲瀷
  3. 瀛楃涓叉瘮杈冨尯鍒嗗ぇ灏忓啓锛堝缓璁粺涓€杞皬鍐欙級

涓婃鎴戠敤杩欐嫑鎼炲畾涓夋潯浠舵帓搴忥紝闅斿iOS缁勭殑灏忓摜鐩存帴缁欐垜鐐逛簡濂惰尪锛?/p>


灏忕紪韪╁潙鏃ヨ

  • 馃毇 蹇樿瀹炵幇==杩愮畻绗?鈫?缂栬瘧鍣ㄧ柉鐙傛姤閿?/li>
  • 馃毇 鏃ユ湡鐢ㄥ瓧绗︿覆鏍煎紡 鈫?鎺掑簭缁撴灉涔卞
  • 馃毇 闂寘閲屽啓鍙嶅弬鏁伴『搴?鈫?鎺掑簭瀹屽叏棰犲€?/li>
  • 馃毇 娌℃湁澶勭悊鍙€夊€?鈫?杩愯鏃跺穿婧?/li>

鏈€鎯ㄧ棝鐨勪竴娆★細缁橴ser瀵硅薄鎺掑簭鏃舵病澶勭悊nil鍊硷紝APP涓婄嚎褰撳ぉ宕╀簡3娆★紝宸偣琚繍钀ュ皬濮愬杩芥潃...


涓汉琛€娉粡楠?/h3>
  1. 鈥?strong>鈥嬭兘鐢ㄧ郴缁熷崗璁氨鍒嚜宸辨姌鑵锯€?/strong>鈥嬶紙Comparable鐪熼锛?/li>
  2. 鈥?strong>鈥嬫棩鏈熸帓搴忎竴瀹氳鐢―ate绫诲瀷鈥?/strong>鈥嬶紙瀛楃涓叉瘮杈冧細鍑洪鏁呬簨锛?/li>
  3. 鈥?strong>鈥嬪鏉′欢鎺掑簭璁板緱娴嬭瘯杈圭晫鎯呭喌鈥?/strong>鈥嬶紙姣斿鍒嗘暟鍏ㄧ浉鍚岋級
  4. 鈥?strong>鈥嬪鏉傛帓搴忓缓璁皝瑁呮垚鏂规硶鈥?/strong>鈥嬶紙涓嶇劧涓変釜鏈堝悗鑷繁閮界湅涓嶆噦锛?/li>

鏈€鍚庤鍙ユ帍蹇冪獫鐨勶細鏂版墜鍗冧竾鍒鎺掑簭鍚撲綇銆備綘鐪嬫垜鐜板湪闂潃鐪奸兘鑳藉啓鎺掑簭浠g爜锛屽綋骞翠笉涔熸槸琚竴涓姤閿欎俊鎭悡寰楁兂鍒犲簱璺戣矾锛熶綘淇℃垜锛岀収鐫€杩欎釜鎸囧崡缁冧笁澶╋紝淇濆噯浣犱篃鑳藉湪浠g爜閲屾妸瀵硅薄浠畨鎺掑緱鏄庢槑鐧界櫧锛?/p>

搜索