(已解决) 集算器 record 字段值的修改
大佬们,我还是想求助一下集算器中关于记录 record 字段值的修改方法。目前,对记录中字段值的修改有两种方法 modify 和 field,如下所示:
1、modify 方法,把记录 {金:0, 银:0, 铜:0} 中的字段 "银" 对应的值修改为 1:
2、field 方法,把上述记录中的字段 "金" 对应的值修改为 2,把倒数第一个字段的值改为 3:
{金:0,银:0,铜:0}
=A1.modify(1:银)
=A1.field("金",2)
=A1.field(-1,3)
可以看到,field 方法既可以用字段名称也可以用序号,这意味着 field 方法可以传参数,而 modify 方法只能硬写字段,或者按顺序依次修改、或者按记录 modify@r,modify@f 修改,不能传参。
如果我想实现以下功能,在记录当前值的基础上复合赋值,比如,记录. 字段 += 值
这样的话,只能硬写字段,不能传参数,而用 field 方法能传参数,但写法上会有点繁,字段原来的值不能用一种简洁的方式得到:
{金:0,银:0,铜:0}
=A1.field(-1,A1.field(-1)+1)
=A1.field("金",A1.field("金")+2)
而写成以下这样是错的:
= 记录.field(-1)+=1" , 或者
= 记录.field(“字段名”)+=1
所以,我想着修改记录值的时候,能不能有一种简洁的方式描述出字段原来的,就像序列.(~) 其中的 ~ 就是对应的值。比如,在 PowerQuery 中修改记录字段值时,可以用 each _ 表示字段对应的值:
为什么一直纠结于记录值的修改?用在哪里?因为,记录可以横向展开,当表中的某一列的值是记录时,可以用 derive@x() 横向展开记录中的所有字段,一下得到若干列,不用 new 方法一个一个写出去。在某些应用场景中用 record 结构会比较方便。
恳请大佬们有空时看看,可否实现对记录的复合赋值写法,能传参数,谢谢!
这种循环过程中引用的字段不变的可以用宏替换,比如:r.${namevar}+=1
麻烦大佬帮忙写一下 iterate 语句中如何写成 ~~.${fieldname} 的形式:
抱歉,看错了,字段名循环过程是变化的情况只能用 field 函数引用,宏只能处理循环过程不变的情况。
不抱歉,大佬言重了。🙏
下面的例子也不是很恰当,如果实现结果只要 pivot@s(字段; 列,sum()) 就行了。
我是想着如何能对 record 复合赋值。
record. 字段名 +=1 这样写没问题,但字段名不能是变量,只能硬写。
传递变量的话,好像只能用 field 函数:
record.field(字段名,record.field( 字段名)+1) 这样可以。
但括号里的记录取值部分 record.field(字段) 可不可以简写,比如写成:
record.field(字段名,~+1) 这里的 ~ 就表示字段名对应的字段值。
或者写成 record.field(字段名)+=1 这样的赋值形式。😄
增加了对 record.field(字段名)+=n 的支持,可以更新开源代码使用
握艹,谢谢大佬成全,谢谢老贼🙏 🙏
记录的复合赋值一直是我心心念的,哈哈…😄 😄
念念不忘,终有回响。
It truly made my day!Thx a lot!
程序已更新,请前往下载贴中下载最新的 esproc-bin.jar 文件。