首页 > 解决方案 > List.Sort by PowerQuery (M) 中的子字符串

问题描述

我有一个要排序的字符串列表:

列表

我希望我的排序结果如下:首先是 2 位数字,然后是 1 个字符的字母。但是,我无法为排序创建静态顺序,因为字符串会随着时间的推移而更新/更改:

列表

PowerQuery MI 中是否有 List.Sort 语法/属性可用于按列表中的子字符串进行排序?如果没有,是否有任何优雅的方法可以在没有静态列表顺序的情况下完成此操作?

标签: listsortingpowerquery

解决方案


您需要定义一个自定义比较器并将其作为第二个参数传递给 List.Sort。这是代码,假设每个项目只有1 个字母

let
    list = {"F20", "S20", "S21", "F21"},
    transform = (value) => Text.Range(value, 1) & Text.Range(value, 0, 1)
in
    List.Sort(list, (a, b) => Value.Compare(transform(a), transform(b)))

结果 F20 S20 F21 S21


推荐阅读