条件序列函数
以下条件 C API 函数接受一个输入序列或两个(then、else)序列以及一个布尔序列条件。序列可以是分析函数页面中列出的任何类型,且条件为布尔序列。
两个输入序列必须是相同的类型。如果两个输入序列的长度不同,则操作仅在较短序列的元素数量上执行。 结果为值序列或标量值。
iif
mco_seq_iif_TYPE()
根据条件序列中元素的布尔值选择 then 序列或 else 序列中的元素。三个序列以相同的速度遍历(如果使用 then 序列中的元素,则跳过 else 序列中的元素,反之亦然)。
if
mco_seq_if_TYPE()
根据条件序列中元素的布尔值选择then 序列或 else 序列中的元素。与 mco_seq_iif_TYPE()
不同,未使用的序列中的位置不会被更改。
filter
mco_seq_filter_TYPE()
仅保留输入序列中对应于条件序列中布尔值为真的那些元素。
MCO_RET mco_seq_filter_TYPE(
mco_seq_iterator_h result,
mco_seq_iterator_h cond,
mco_seq_iterator_h input
);
filter_search
mco_seq_filter_search()
此函数与生成的 classname_fieldname_search()
函数配合使用,其中 classname_fieldname_search()
的结果作为参数 search_result
传递,而筛选条件则通过参数 cond
传递。
MCO_RET mco_seq_filter_search(
mco_seq_iterator_h result,
mco_seq_iterator_h cond,
mco_seq_iterator_h search_result
);
filter_pos
mco_seq_filter_pos()
获取序列 cond
中值为真的元素的位置。
MCO_RET mco_seq_filter_pos(
mco_seq_iterator_h result,
mco_seq_iterator_h cond
);
示例
以下是演示条件函数的示例代码片段:
Quote_by_sym_index_cursor(trans, "e_cursor);
for (rc = mco_cursor_first(trans, "e_cursor);
rc != MCO_S_CURSOR_END;
rc = mco_cursor_next(trans, "e_cursor))
{
/* Get current object */
Quote_from_cursor(trans, "e_cursor, "e);
/* Select interval */
Quote_day_last("e, &last);
Quote_day_search("e, &day_iterator, DMY(1, MONTH(last), YEAR(last)),
MCO_SEQ_BOUNDARY_INCLUSIVE,
last,
MCO_SEQ_BOUNDARY_INCLUSIVE);
Quote_open_project("e, &open_iterator, &day_iterator);
Quote_close_project("e, &close_iterator, &day_iterator);
/* Construct operator's pipeline */
mco_seq_gt_float(>_iterator, &close_iterator, &open_iterator);
mco_seq_filter_uint4(&filter_iterator, >_iterator, &day_iterator);
...
}
rc = mco_trans_commit(trans);