TSL语言基础 > 矩阵计算 > 矩阵查找和遍历的保留字和算符

MfindSparse    

简述
对数组进行条件查找或替换,不假定维度数,对数组的节点进行深度遍历。是对Mfind功能的一个扩展,用法与MFind一致,可参考MFind用法。
在功能上与MFind相比,对于FMArray而言功能与MFind一致。
对于数组Array,MFind最多只能遍历两维,而本函数支持多维数组以及稀疏矩阵,即MFindSparse对于数组的维度遍历可以进行到最深一维。
定义
MFindSparse (matrix:Array[;Exp:Expression[;RetValues:Boolean=False[;ReplaceValue]]]):Array;
参数
名称类型说明
matrixArray为查找的数组,如果只有一个参数,默认查找为真的项。
ExpExpression条件表达式。可选参数,例如:MCell>5为值>5,还可以调用Mrow,Mcol等关键字
RetValuesBoolean=False布尔类型,可选参数,如果只返回符合条件的行列信息,设置假(默认值)。
如果还需要返回符合条件的值则设置为真。
ReplaceValue 任意值,可选参数,替换值,对查找的数组进行值的替换,用于替换符合条件的值
返回Array 二维数组。存放符合条件的元素的位置信息,从0开始,代表第一维度,1代表第二维度,依此类推,直至最深维度。

根据调用时参数的个数不同,功能与返回值对应如下:


一个参数:返回为真的元素的每个维度的下标。


两个参数:返回符合指定条件的元素的每个维度的下标。


三个参数:返回维度下标的同时可以选择是否还返回其对应的值

  四个参数:在返回维度下标的同时,还对源数组符合条件的值进行替换,直接对源数组进行更新。
  • 范例

    范例01:一个参数-返回为真的元素的每个维度的信息,以及与MFind的深度差异展示
    MfindSparse查找为真的项位置
    MFind查找为真的项的位置
    //多维不完全矩阵
    t:=array(1,2,0,('A':array(2),'B':2),('A':array(1,2),'B':12));
    return MFindSparse(t);

    //多维不完全矩阵
    t:=array(1,2,0,('A':array(2),'B':2),('A':array(1,2),'B':12));
    return MFind (t);
    返回:


    返回:


    通过上面对比可以看出两者差异:
    1 对于结果集结构,对于一维元素,MFind下标存放依然是一维,二维存放是二维,而MFindSparse都存放在二维数组中。
    2 对于判断为真的项,MFind最多只对二维内容进行判断,而MFindSparse可以深入到最高维,比如范例中的行标为3,列标为“A”的第一个值array(2),MFind是对整个array(2)进行判断是否为真,下标只记录到第二维“A”这层,而MFindSparse是对它数组内的值2进行判断是否为真,且返回其第三维度下标0。

    范例02:两个参数-返回符合指定条件的元素的每个维度的信息
    MfindSparse查找符合条件的项的位置
    MFind查找符合条件的项的位置
    t:=array(1,2,0,('A':array(2),'B':2),('A':array(1,2),'B':12));
    //返回元素值为2 的项的位置信息
    return MFindSparse(t,mcell=2);

    t:=array(1,2,0,('A':array(2),'B':2),('A':array(1,2),'B':12));
    //返回元素值为2 的项的位置信息
    return MFind (t,mcell=2);


    原数组最深维度为三维,遍历中也能返回第三维位置
    原数组最深维度为二维,遍历中只能判断到第二维

    其它更多功能范例可参考MFind
相关