@@ -528,18 +528,25 @@ function m.utf8Len(str, start, finish)
528528 return len
529529end
530530
531- function m .revertTable (t )
532- local len = # t
531+ -- 把数组中的元素顺序*原地*反转
532+ --- @param arr any[]
533+ --- @return any[]
534+ function m .revertArray (arr )
535+ local len = # arr
533536 if len <= 1 then
534- return t
537+ return arr
535538 end
536539 for x = 1 , len // 2 do
537540 local y = len - x + 1
538- t [x ], t [y ] = t [y ], t [x ]
541+ arr [x ], arr [y ] = arr [y ], arr [x ]
539542 end
540- return t
543+ return arr
541544end
542545
546+ -- 创建一个value-key表
547+ --- @generic K , V
548+ --- @param t table<K , V>
549+ --- @return table<V , K>
543550function m .revertMap (t )
544551 local nt = {}
545552 for k , v in pairs (t ) do
@@ -634,6 +641,11 @@ function m.eachLine(text, keepNL)
634641 end
635642end
636643
644+ --- @alias SortByScoreCallback fun ( o : any ): integer
645+
646+ -- 按照分数排序,分数越高越靠前
647+ --- @param tbl any[]
648+ --- @param callbacks SortByScoreCallback | SortByScoreCallback[]
637649function m .sortByScore (tbl , callbacks )
638650 if type (callbacks ) ~= ' table' then
639651 callbacks = { callbacks }
@@ -661,6 +673,16 @@ function m.sortByScore(tbl, callbacks)
661673 end )
662674end
663675
676+ --- @param arr any[]
677+ --- @return SortByScoreCallback
678+ function m .sortCallbackOfIndex (arr )
679+ --- @type table<any , integer>
680+ local indexMap = m .revertMap (arr )
681+ return function (v )
682+ return - indexMap [v ]
683+ end
684+ end
685+
664686--- 裁剪字符串
665687--- @param str string
666688--- @param mode ? ' "left"' | ' "right"'
@@ -855,6 +877,15 @@ function m.arrayHas(array, value)
855877 return false
856878end
857879
880+ function m .arrayIndexOf (array , value )
881+ for i = 1 , # array do
882+ if array [i ] == value then
883+ return i
884+ end
885+ end
886+ return nil
887+ end
888+
858889function m .arrayInsert (array , value )
859890 if not m .arrayHas (array , value ) then
860891 array [# array + 1 ] = value
@@ -887,4 +918,24 @@ function m.cacheReturn(func)
887918 end
888919end
889920
921+ --- @param a table
922+ --- @param b table
923+ --- @return table
924+ function m .tableMerge (a , b )
925+ for k , v in pairs (b ) do
926+ a [k ] = v
927+ end
928+ return a
929+ end
930+
931+ --- @param a any[]
932+ --- @param b any[]
933+ --- @return any[]
934+ function m .arrayMerge (a , b )
935+ for i = 1 , # b do
936+ a [# a + 1 ] = b [i ]
937+ end
938+ return a
939+ end
940+
890941return m
0 commit comments