List.Sort是对list进行排序的函数,在函数说明中有如下图的例子:
这个例子说明List.Sort()
加上Value.Compare()
的组合是可以对以串列元素为自变量的函数结果进行排序,比如可以根据字串长度进行排序。如果我们有串列为{"**", "+++", "&&&&", "\"},需要根据字串长度进行降序排序,可以通过下图的公式解决这个问题:
let Source= List.Sort( {"**", "+++", "&&&&", "\"}, (x,y)=> Value.Compare( 1/Text.Length(x), 1/Text.Length(y) ) ) in Source
博主说:
以上为螺旋矛盾同学的投稿,在此表示感谢,也非常欢迎其他同学的积极投稿。
有关List.Sort
函数,需要两个参数,第二参数类型为可选的any。当一个函数参数为any的时候,灵活性就大大提高,可玩性也非常高。
有但不局限于以下几种用法:
第二参数可以不填,= List.Sort({"**", "+++", "&&&&", "\"})
,文本默认按照首字符ASCII码升序排序。
第二参数填固定枚举值,Order.Descending
/Order.Ascending
,按照指定升序/降序排列,或用0、1替代,= List.Sort({"**", "+++", "&&&&", "\"},1)
表示指定按照降序排列。
也可以是一个函数或表达式,比如按照文本长度排序,默认升序,= List.Sort({"**", "+++", "&&&&", "\"},each Text.Length(_))
,或者简化为= List.Sort({"**", "+++", "&&&&", "\"},Text.Length)
这是按照文本长度升序,文本越长排名越靠前,如何降序呢?比如可以用1除,分母越大结果越小,排名就越靠后,= List.Sort({"**", "+++", "&&&&", "\"},each 1/Text.Length(_))
。
或者可以对升序排列的结果嵌套逆序函数,= List.Reverse(List.Sort({"**", "+++", "&&&&", "\"},Text.Length))
。
再或者直接第二参数填list控制排序方式,= List.Sort({"**", "+++", "&&&&", "\"},{Text.Length,1})
。
请问:List.Sort({2, 3, 1}, (x, y) => Value.Compare(1/x, 1/y))
当中,x,y分别代表什么呢?
这个句子与List.Sort({2,3,1},each 1/_)应该没有区别吧,为什么要引入两个参数呢?不太理解。
在这个例子中两种写法没有区别,但是别的情形中可能二元的更适合,三个数取两个进行组合的意思
请问这个list, 按长短排序后是这样的。有什么方案吗? 谢谢
RXFUYN
UHGZHG
RXFUYN
EZKHHY
UZAPIZ
WMGOQU
GIHSEU
XGXSOI
GOKRZC
NAZRER
NAZRERPQOTKL
NAZRERGIHSEU
QQGZWUOCLVDZ
OCLVDZXGXSOI
WMGOQUFMTUCM
GIHSEUXYZMIR
SRKXXFEZKHHY
SOLSPIPQOTKL
NAZRERUMVFQW
UMVFQWPAIPDK
XYZMIRXYZMIR
RXFUYNERNCKK
SOLSPIXGXSOINAZRER
SRKXXFXGXSOIYHNSBQ
UZAPIZGIHSEUSIMXQH
DMZAGVFMTUCMBCVPHS
#"A" = List.Sort(
#"Changed Type"[Column1],
{Text.Length,0}
)
这样吗?