Ian Cook created ARROW-13064:
--------------------------------

             Summary: [C++] Add a general "if, ifelse, ..., else" kernel
                 Key: ARROW-13064
                 URL: https://issues.apache.org/jira/browse/ARROW-13064
             Project: Apache Arrow
          Issue Type: Improvement
          Components: C++
            Reporter: Ian Cook


ARROW-10640 added a ternary {{if_else}} kernel. Add another kernel that extends 
this concept to an arbitrary number of conditions and associated results, like 
a vectorized {{if-ifelse-...-else}} with an arbitrary number of {{ifelse}} and 
with the {{else}} optional. This is like a SQL {{CASE}} statement.

How best to achieve this is not obvious. To enable SQL-style uses, it would be 
most efficient to implement this as a variadic kernel where the even-number 
arguments (0, 2, ...) are the arrays of boolean conditions, the odd-number 
arguments (1, 3, ...) are the corresponding arrays of results, and the final 
argument is the {{else}} result. But I'm not sure if this is practical. Maybe 
instead we should implement this to operate on listarrays, like NumPy's 
{{[np.where|https://numpy.org/doc/stable/reference/generated/numpy.where.html]}}
 or 
{{[np.select|https://numpy.org/doc/stable/reference/generated/numpy.select.html]}}.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to