X++中的数组

摘要:
最近,我与阵列打了很多交道。在此期间,我遇到了一些问题。让我在这里总结一下,X++中的数组可以分为两种类型:基本类型和AFC中的数组。区别在于前者只能存储X++基本类型(如int、real),但不能存储类对象和表。本文仅讨论前者。这里,我们只描述了与C#不同的部分:1.只支持一维数组;无法支持多维数组。只能说是编译器的限制。2.定义分为动态、固定和部分
最近跟数组打交道必较多,期间遇到了一些问题,在这里做一下总结.
X++中的数组分为两类:基础类型和AFC中的Array,区别在于前者只能存放X++基础类型(比如int,real)而不能存放class对象和Table,本文只讨论前者.
这里只叙述跟C#中不同的部分:
1.只支持一维数组;
不支持多维数组也没办法,只能说是编译器限制.
2.定义分为dynamic, fixed length, and partly on disk等三种不同类型;
3.索引从1开始;
索引0也可以用,给索引为0的元素赋值,将导致数组中所有的元素被清空.
X++中的数组第1张    str aa[2];
X++中的数组第1张    ;
X++中的数组第1张    aa[
1]="aaa";
X++中的数组第1张    aa[
2]="bbb";
X++中的数组第1张    print    aa[
1]+" "+aa[2] ;
X++中的数组第1张    aa[
0]="ccc";
X++中的数组第1张    print aa[
1]+ " "+ aa[2];
X++中的数组第1张    pause;
4.可用Array类型的EDT定义全局Array类型;
这样定义的数组类型,可以用来定义变量,也可以做为数据库的字段.
如果做为表的字段,在数据库中表现为跟数组EDT元素个数相同的字段,依次为 字段名称,字段名称1_,字段名称2_,比如系统中如果某个表中包含了Dimension类型的字段,取名为Dim,则依次有Dim,Dim1_和Dim2_,其类型为Dimension的基类型string.
数据库中的任何一个字段都可以用FiledNum函数取得某个字段的fieldId,对于数组类型的EDT,FiledNum取得的只是数组的第0个元素,不会对应具体的值,具体的值需要用
X++中的数组第1张static FieldId fieldId2Ext(FieldId fieldId, int arrayIndex)
X++中的数组第1张
这个函数取得,另外还有几个函数
static FieldId fieldExt2Id(FieldId fieldExtId)
取得Fieldid即数组的第0个元素;
static int fieldExt2Idx(FieldId fieldExtId)
取得arrayIdx;
好象说不明白,看代码吧.
X++中的数组第1张static void ArrayFieldId(Args _args)
X++中的数组第12张X++中的数组第13张
X++中的数组第14张{
X++中的数组第15张   FieldId arraryFieldId;
X++中的数组第15张   FieldId arrayElementFieldId;
X++中的数组第15张   
int arrayIndex;
X++中的数组第15张   ;
X++中的数组第15张   
//取得Dimension的FieldId
X++中的数组第15张
   arraryFieldId =  fieldNum(custTable,dimension);
X++中的数组第15张   print  arraryFieldId;
X++中的数组第15张   arraryFieldId 
= FieldId2Ext(fieldNum(custTable,dimension),0);
X++中的数组第15张   print  arraryFieldId;
X++中的数组第15张
X++中的数组第15张   
//取得CostCenter对应的FieldId,CostCenter是第二个元素
X++中的数组第15张
   arrayElementFieldId = FieldId2Ext(arraryFieldId,2);
X++中的数组第15张   print    arrayElementFieldId;
X++中的数组第15张
X++中的数组第15张   
//取得CostCenter所在数组的FiledId,即Dimension的FieldId;
X++中的数组第15张
   print FieldExt2Id(arrayElementFieldId);
X++中的数组第15张   
//取得CostCenter在数组中的索引
X++中的数组第15张
   arrayIndex = FieldExt2Idx(arrayElementFieldId);
X++中的数组第15张   print  arrayIndex;
X++中的数组第15张
X++中的数组第15张   pause;
X++中的数组第15张
X++中的数组第37张}
如何用表变量引用数组EDT的某个字段值那?跟普通的Array操作是一样的,用[]来引用.
X++中的数组第1张static void Array(Args _args)
X++中的数组第12张X++中的数组第13张
X++中的数组第14张{
X++中的数组第15张    CustTable cust;
X++中的数组第15张     ;
X++中的数组第15张    select Dimension[
1] from cust
X++中的数组第15张    where cust.AccountNum 
== '      4000';
X++中的数组第15张    print cust.Dimension[
1];
X++中的数组第15张
X++中的数组第15张    select Dimension from cust
X++中的数组第15张    where cust.AccountNum 
== '      4000';
X++中的数组第15张    print cust.Dimension[
1];
X++中的数组第15张
X++中的数组第15张    pause;
X++中的数组第37张}

5.不能做返回参数;
这应该是编译器的缺陷,当然可以有变通的做法,采用AFC中的Array,这样就看不出Array的葫芦里卖的什么药了,有些,再说我只想返回一个整型数组,却非要我包成一个类,bt......
对于在EDT里定义的数组倒是可以做函数的返回参数,不过要注意一点,如果定义的数组EDT的基类型不是string,那么返回类型只能是Anytype,如果返回在EDT中定义的类型,编译通过不了,会报类型不匹配,真是bt到家了......
6.做入参时的约束.
这个也够BT的,在后面的文章中详细介绍一下.

免责声明:文章转载自《X++中的数组》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Xftp5解决“要继续使用此程序,您必须应用最新的更新或使用新版本”浏览器F12调试器定位系统前后端bug下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

numpy中的ndarray方法和属性

原文地址 NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推。在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量。比如说,二维数组相当于是一个一维数组,而这个一维数组中每个元素又是一个一维数组。所以这个一维数组就是NumPy中的轴(axes),而轴的数量——秩,就是数组的维数。 Numpy库中的...

Js--String、Date、Array对象

/* * String 对象 属性 length 方法 */ //String的length属性 var strL = "abcde"; document.write("<br/>"); document.write("属性:" + strL.length); //String的方法 document.write("<br/>"...

cJSON 使用详解

由于c语言中,没有直接的字典,字符串数组等数据结构,所以要借助结构体定义,处理json。如果有对应的数据结构就方便一些, 如python中用json.loads(json)就把json字符串转变为内建的数据结构处理起来比较方便。     cjson库文件下载:     sourceforge地址     一个重要概念:         在cjson中,js...

[ZZ] NumPy 处理数据

NumPy-快速处理数据--ndarray对象--数组的创建和存取https://www.cnblogs.com/moon1992/p/4946114.html NumPy-快速处理数据--ndarray对象--数组的创建和存取  本文摘自《用Python做科学计算》,版权归原作者所有。 NumPy为Python提供了快速的多维数组处理的能力,而SciP...

Linux内核调试方法总结之backtrace

backtrace 【用途】用户态或者内核态程序异常退出时回溯堆栈信息 【原理】通过对当前堆栈的分析,回溯上层函数在当前栈中的帧地址,直至顶层函数。帧地址是指在栈中存在局部变量、上一级函数返回地址、寄存器值的内存空间。由于不同处理器堆栈实现不同(向上增长和向下增长),此功能的具体实现是编译器内建的__buildin_frame_address及__buil...

Perl之哈希与列表

[自用] 先引用一段话来简单介绍为什么用‘引用’以及什么是‘引用’: “当Perl进化到Perl 5时,我们必须考虑到哈希原来的设计:哈希的键值必须是标量, 一个'引用'就是一个指向一个完整列表或完整哈希(或指向其他的东西,比如函数)的标量值。Perl中的'引用'就像列表和哈希的名字。它们是Perl中私有的,内部的名字,所以你可以确信它们是明确的,...