有没有办法过滤 presto 数组中的奇数或偶数索引?

Posted

技术标签:

【中文标题】有没有办法过滤 presto 数组中的奇数或偶数索引?【英文标题】:Is there a way to filter odd or even indices in a presto array? 【发布时间】:2021-12-18 15:34:36 【问题描述】:

我有一个 presto 数组,无论数组中的值是什么,我都需要过滤掉奇数索引。

Array = ['no', 'matter', 'what', 'is, 'here']

期望的结果 = ['matter', 'is']

我尝试了很多不同的 sequence(2, cardinality(Array), 2) 变体,但似乎没有任何效果。

【问题讨论】:

【参考方案1】:

我最终用我创建的索引数组压缩了数组

zip(ar, sequence(1, cardinality(ar), 1))

然后我在x -> x[2]%2=0 上过滤x[2] 并仅选择x -> x[1] 并进行转换。

其他地方的一些其他建议是用序数取消嵌套,在序数列上过滤然后聚合回来。

【讨论】:

【参考方案2】:

另一种方法 - 生成仅需要的索引序列(对于偶数索引 - 从 2 开始并将 step 设置为 2)并在其上使用 transform

WITH dataset(arr) AS ( values (array[1,2,3,4,5]) )

SELECT transform(sequence(2, cardinality(arr), 2), i -> arr[i])
FROM dataset 

输出:

_col0
[2, 4]

【讨论】:

以上是关于有没有办法过滤 presto 数组中的奇数或偶数索引?的主要内容,如果未能解决你的问题,请参考以下文章

PHP获取数组中奇偶数

使用 ForEach (SwiftUI) 的偶数行和奇数行

java 在数组中输入和检查偶数或奇数

将一个数组拆分为两个数组,一个为奇数数组,一个为偶数数组

调整数组中的顺序使奇数位于偶数前边

c语言分段排序 整型数组,偶数在前,奇数在后,从小到大