arr := [["张三","18岁","100斤"]
, ["李四","19岁","110斤"]
, ["王五","3岁","40斤"]]
; MsgBox的输出方式需要优化成函数
排序1 := storarr(arr, 1), 排序2 := storarr(arr, 2), 排序3 := storarr(arr, 3)
; 排序1 按首字母拼音排序,排序2和3 按数字大小排序
MsgBox % 排序1[1][1] "`n" 排序1[1][2] "`n" 排序1[1][3] "`n`n" 排序1[2][1] "`n" 排序1[2][2] "`n" 排序1[2][3] "`n`n" 排序1[3][1] "`n" 排序1[3][2] "`n" 排序1[3][3]
storarr(Inarr, l := 1, s := "N"){
lsArr := []
Outarr := []
for k,v in Inarr {
lsArr[v[l]] := v
lsstr .= v[l] "`n"
}
Sort, lsstr, % s
lsstr := Trim(lsstr,"`n")
lssz := StrSplit(lsstr, "`n")
For i,n in lssz
Outarr.Push(lsArr[n])
Return Outarr
}
; 数组排序 By Tebayaki 【根据第二个数据来排序】
; 原例子使用的数组
arr := [["a", "17y"]
, ["b", "20y"]
, ["d", "20y"]
, ["c", "15y"]]
arr := [["张三","18岁","100斤"]
, ["李四","19岁"]
, ["张三","3岁","40斤"]]
排序1 := BubbleSort(arr)
; 排序1 按首字母拼音排序,排序2和3 按数字大小排序
MsgBox % 排序1[1][1] "`n" 排序1[1][2] "`n" 排序1[1][3] "`n`n" 排序1[2][1] "`n" 排序1[2][2] "`n" 排序1[2][3] "`n`n" 排序1[3][1] "`n" 排序1[3][2] "`n" 排序1[3][3]
; MsgBox % BubbleSort(arr)[1][1]
BubbleSort(arr){
loop % arr.Length() - 1
loop % arr.Length() - A_Index
if (StrCompare(arr[A_Index][2], arr[A_Index + 1][2]) > 2)
buf := arr[A_Index], arr[A_Index] := arr[A_Index + 1], arr[A_Index + 1] := buf
return arr
}
StrCompare(s1, s2){
return DllCall("CompareStringW", "uint", 0, "uint", 8, "str", s1, "int", StrLen(s1), "str", s2, "int", StrLen(s2))
}
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。

评论(0)