官方说明:
通过将转换函数 transform 应用到列表 list 来返回值的新列表。
List.Transform( list as list, transform as function) as list
案例1:
基础用法,用each _
或(x)=> x
的组合对原list转换,此时两种方法等价。实际中数据多是table结构,而List.Transform
最终返回的是一个list,如果要对表中的某一列转换请用Table.TransformColumns
。
list2= List.Transform(源[list],each 10), //把原来的list每一个元素都转换成10 list3= List.Transform(源[list],each _+10), //将原list每一个元素+10 list4= List.Transform(源[list],(x)=>x+10), //同上
案例2:
如果你看到如=List.Transform({1..2},Text.From)
这种写法,一定会问这里为什么没有each也没有_,Text.From
也不用()?
注意第二参数为function,所以我们可以直接丢一个函数名进去,等价于=List.Transform({1..2},each Text.From(_))
。
适用于必需参数只有一个的情况,常用于数据类型转换。
案例3:
构建list,然后将list中的每一个元素带入另一个公式中,返回运算结果的新list,有点for each in的意思。
比如网页URL为https://pqfans.com/?page1,其中1代表页码,为了获得1-10页所有URL的集合,我们可以构建{1..10}的list,而这个list是表中本身不存在的。
=List.Transform({1..10},each "https://pqfans.com/?page"&Text.From(_))
常用于获取网抓、隔行/列选取指定范围等,很常见也很好用。
案例4:
配合索引,如图
= List.Transform(List.Positions(源[名称]),each 源[数量]{_})
为了获取索引,我们常用List.Positions()
或{0..Table.RowCount()-1}
的组合,得到{0..6}的list,然后将list中每一个元素带入后面的索引,得到[数量]这一列的每一项数据。
在这个案例中看起来有点多此一举,但在一些复杂的案例中,List.Transform
配合索引的用法非常常见。