Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PowerQuery中的List.Sort by Substring(M)_List_Sorting_Powerquery - Fatal编程技术网

PowerQuery中的List.Sort by Substring(M)

PowerQuery中的List.Sort by Substring(M),list,sorting,powerquery,List,Sorting,Powerquery,我有一个要排序的字符串列表: 名单 F20 S20 S21 F21 我希望我的排序结果如下:首先按2位数字排序,然后按1个字符的字母排序。但是,我无法为排序创建静态顺序,因为字符串将随时间更新/更改: 名单 S20 F20 S21 F21 PowerQuery M中是否有List.Sort语法/属性可用于按列表中的子字符串进行排序?如果没有,没有静态列表顺序,有什么优雅的方法可以实现这一点吗?您可以使用键来实现这一点 inputList = ['F20', 'S20', 'F21

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

名单

  • F20
  • S20
  • S21
  • F21
我希望我的排序结果如下:首先按2位数字排序,然后按1个字符的字母排序。但是,我无法为排序创建静态顺序,因为字符串将随时间更新/更改:

名单

  • S20

  • F20

  • S21

  • F21


PowerQuery M中是否有List.Sort语法/属性可用于按列表中的子字符串进行排序?如果没有,没有静态列表顺序,有什么优雅的方法可以实现这一点吗?

您可以使用
键来实现这一点

inputList = ['F20', 'S20', 'F21', 'S21']

sortedList = sorted(inputList, key=lambda item: item[0:1], reverse=True)
sortedList = sorted(sortedList, key=lambda item: item[1:])
print(sortedList)

您需要定义一个自定义比较器,并将其作为第二个参数传递给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

你希望F20高于S20还是低于S20?@AnmolParida-我希望S在F之前。这需要一些明确的编码。我不熟悉PowerQuery中的这种语法——这真的是Python吗?这是Python。您可以使用
。抱歉,我请求了PowerQueryM支持-你是说有一种方法可以在M对话中实现Python吗?坦白地说,如果可能的话,我宁愿把剧本保留在M里。你太棒了,萨沙。非常感谢您的支持-我将进一步测试。