(五)替代指定数据提取。
1. 找到目标值并用指定值替换后提取
List.ReplaceValue(list as list, oldValue as any, newValue as any,replacer as function)as list
第1参数是列表;第2参数是被替换的旧值(不指定格式);第3参数是去替换的新值(不指定格式);第4参数替换函数。替换函数由2个。一个是数值替换Replacer.ReplaceValue,一个是文本替换Replacer.ReplaceText;4个函数都被必选参数。需要注意的是空值计算列表和空列表代表不一样的含义。
例:
List.ReplaceValue({1..10},1,2,Replacer.ReplaceValue)={2,2..10}
解释:因为列表里面是数值,所以用Replacer.ReplaceValue函数进行替换。
List.ReplaceValue({"a".."z"},"a","b",Replacer.ReplaceText)={"b","b".."z"}
解释:因为列表里面是文本,所以用Replacer.ReplaceText函数进行替换。
List.ReplaceValue({#date(2018,11,11),#datetime(2018,11,11,12,0,0)},#date(2018,11,11),#date(2019,11,11),Replacer.ReplaceValue)={#date(2019,11,11),#datetime(2018,11,11,12,0,0)}
解释:如果是替换时间类型的话,要用Replacer.ReplaceValue函数进行替换。
List.ReplaceValue({},{},"a",Replacer.ReplaceValue)={}
解释:因为是空列表,所以也就不存在值的概念,返回的当然也是空列表。
List.ReplaceValue({null},null,"a",Replacer.ReplaceText)={null}
解释:因为空值是需要用Replacer.ReplaceValue来进行替换,使用Replacer.ReplaceText则无效。
List.ReplaceValue({null},null,"a",Replacer.ReplaceValue)={"a"}
解释:替换空值需要用到函数Replacer.ReplaceValue
List.ReplaceValue({"a"},"a",null,Replacer.ReplaceValue)={null}
解释:如果是要用空值替换对应的值,也是需要用Replacer.ReplaceValue函数。
2. 指定范围内进行值替换
List.ReplaceRange(list as list, index as number, count as number,replaceWith as list)as list
第1参数是列表格式;第2参数是索引的数字,索引是0起始;第3参数是替换的个数;第4参数是替换的列表格式;最终返回的也是列表格式。此外需要注意的是第2参数+第3参数的值要<=列表的值数量。通俗理解就是用一个列表替换一个指定范围列表。
例:
List.ReplaceRange({1..10},0,1,{"a"})={"a",2..10}
解释:找到索引起始值为1,替换1个,用"a"替换
List.ReplaceRange({1..10},1,5,{"a","b"})={1,"a","b",7..10}
解释:找到索引起始值为2,连续替换5个,相当于{2..6},用{"a","b"}列表替换{2..6}
3. 对列表指定批量替换
List.ReplaceMatchingItems(list as list, replacements as list, optional equationCriteria as any) as list
第1参数是数据列表;第2参数是批量替换的列表,每一个新旧替换作为一个list并组合成一个总的list(相当于大list套小list,要有双层嵌套{{}}格式);第3参数可以指定一个可选相等条件值来控制相等测试(也就是用来替代被替换的值)。
例:
List.ReplaceMatchingItems({1..10}, {{1,"a"}})={"a",2..10}
解释:用"a"替换1生成新列表
List.ReplaceMatchingItems({1..10}, {{1,"a"},{2,"b"})={"a","b",3..10}
解释:用"a"替换1,用"b"替换2生成列表
List.ReplaceMatchingItems({{1..3},{1..10}},{{{1..3},{"a".."c"}}})={{"a".."c"},{1..10}}
解释:用{"a".."c"}列表替换{1..3}列表并生成新的组合列表。单个列表用可以用多个值替换,多个列表则需用列表进行替换。
List.ReplaceMatchingItems({1..5},{{1,0}},each_<3)={0,0,3,4,5}
解释:使用第2参数的旧值和第3参数做比较,如果符合则替换条件为第3参数,如果不符合,替换条件则是第3参数的相反值。因为第2参数的旧值符合第3参数的条件,则替换条件就是第3参数<3,所以1,2被0替换。
List.ReplaceMatchingItems({1..5},{{1,0}},each_>3)={0,0,0,4,5}
解释:因为第2参数旧值不符合第3参数条件,所以条件为第3参数的相反,也就是<=3,用0替换<=3的条件的值。
List.ReplaceMatchingItems({1..5,1,2},{{1,0}},each_>3)={0,0,0,4,5,0,0}
解释:因为第2参数旧值不符合第3参数条件,所以替换条件是第3参数的相反值,用0替换<3的条件值。
4. 生成重复的列表
List.Repeat(list as list, count as number) as list
第1个参数是需要进行操作的列表;第2个参数是重复的次数
List.Repeat({1},3)={1,1,1}
List.Repeat({1..10},2)={1..10}&{1..10}