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))
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。