三元分析操作
有两个三元分析操作 iif 和 if,它们接受三个输入序列 cond、then 和 else,并生成一个值序列,该序列代表 If-Then-Else 条件的结果。当序列 cond 中的布尔值为真时,从序列 then 中选择一个元素;为假时从序列 else 中选择。然而,序列 2 和 3 中的位置推进方式不同。对于 iif,两个序列的位置都推进到与序列 cond 中的位置相对应;对于 if,只有“被选中”的序列的位置推进。 为了说明这一点,假设我们在三个输入序列中有以下数据集:
cond: {0,1,0,0,1}
then: {-1,-2,-3,-4,-5}
else: {1,2,3,4,5}
对于这些数据集,mco_seq_iif_TYPE() 的结果序列如以下表格所示:
cond | then | else | result |
---|---|---|---|
0 | -1 | 1 | 1 |
1 | -2 | 2 | -2 |
0 | -3 | 3 | 3 |
0 | -4 | 4 | 4 |
1 | -5 | 5 | -5 |
对于 mco_seq_if_TYPE() :
cond | then | else | result |
---|---|---|---|
0 | -1 | 1 | 1 |
1 | -2 | 2 | -1 |
0 | -3 | 3 | 2 |
0 | -4 | 4 | 3 |
1 | -5 | 5 | -2 |
示例
C API
C 函数形式如下:
MCO_RET mco_seq_operator_TYPE(mco_seq_iterator_h result,
mco_seq_iterator_h cond,
mco_seq_iterator_h then_iter,
mco_seq_iterator_h else_iter)
其中 TYPE 是“分析函数”页面中列出的类型之一,而 operator 是 iif 或 if。
以下是一个用 C 语言编写的三元函数示例代码片段:
{
mco_seq_iterator_t result, cond_iterator, then_iterator, else_iterator;
MCO_RET rc;
...
rc = mco_seq_iif_float(&result, &cond_iterator, &then_iterator, &else_iterator);
...
}
Python
Python 的三元方法是 iif() 和 if()。以下是一个展示 Python 三元方法的示例代码片段:
cursor = con.cursor("Quote", "by_sym")
for quote in cursor:
...
openit,closeit = dayit.project('open', 'close')
gtit = quote.close.gt(quote.open)
iffit = gtit.iff(quote.close,quote.open)
...
SQL 方法
INSERT INTO SimpleSequence(testNumber,bVal1,iVal2,iVal3)
VALUES(1,'{0,1,0,0,1}','{-1,-2,-3,-4,-5}','{1,2,3,4,5}');
SELECT bVal1,iVal2,iVal3,seq_iif(bVal1,iVal2,iVal3) AS "iif" FROM SimpleSequence
WHERE testNumber=1;
SELECT bVal1,iVal2,iVal3,seq_if(bVal1,iVal2,iVal3) AS "if" FROM SimpleSequence
WHERE testNumber=1;
bVal1{}
iVal2{}
iVal3{}
iif{}
-------------------------------------------------------------------------
{0, 1, 0, 0, 1}
{-1, -2, -3, -4, -5}
{1, 2, 3, 4, 5}
{1, -2, 3, 4, -5}
bVal1{}
iVal2{}
iVal3{}
if{}
-------------------------------------------------------------------------
{0, 1, 0, 0, 1}
{-1, -2, -3, -4, -5}
{1, 2, 3, 4, 5}
{1, -1, 2, 3, -2}