看板 Mathematica 關於我們 聯絡資訊
※ 引述《a29788685 (嘉峰)》之銘言: : 2)Sort[{{a, 2, 4}, {c, 1, 4}, {d, 3, 5},{b,2,3}}, #1[[2]] < #2[[2]] &] : 可以幫我排序第二個數字,但如果我想要排序第二個及第三個數字: : {c, 1, 4},{b,2,3},{a, 2, 4},{d, 3, 5} : 當第二個數字一樣時,選取第三個數字的大小排序, : 不知道該怎麼作呢? 我想這要講一下 Sort 的第二個參數的意義了 這個參數是所謂的"定序函數" 在排序時它會被傳入兩個參數 (在純函式上就是 #1 跟 #2) 當函數回傳 True 時表示 #1 要在 #2 前面 所以你的問題 要寫成"定序函數"的邏輯的話就是 "當第二數字相同時第三數字小的在前,否則第二數字小的在前" 也就是 If[#1[[2]]==#2[[2]], #1[[3]]<#2[[3]], #1[[2]]<#2[[2]] ]& 更多的條件可以依此類推 -- 平常如果不指定時會是一個內部的順序 在 ref/Sort 當中有詳細說明 同時裡頭也提到預設的定序函式是 OrderedQ[{#1,#2}]& OrderedQ 判斷是否其參數的內部元素照順序排好著的 同樣也能指定定序函式 同樣預設也是這個順序 -- 有人喜歡邊玩遊戲上逼; 也有人喜歡邊聽歌打字。 但是,我有個請求, 選字的時候請專心好嗎? -- 改編自「古 火田 任三郎」之開場白 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.26.44.185 ※ 編輯: LPH66 來自: 114.26.44.185 (07/29 19:36)
chungyuandye:7.0之後有個SortBy 07/29 19:46
chungyuandye:A={{c,1,4},{b,2,3},{a,2,4},{d,3,5}} 07/29 19:47
chungyuandye:SortBy[A,{#[[2]],#[[3]]}&] 07/29 19:47
jurian0101:兩兩帶入比對,這樣不就變成O(n^2) 07/31 09:53
LPH66:所以排序演算法從來沒有一定要兩兩代入比對啊 08/03 18:13
LPH66:也就是說這個排序函數必須自己要是個全序關係才行 08/03 18:14
a29788685:thanks!!! 09/30 00:18