如何替换数组中的元素?

rqqzpn5f  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(1)|浏览(296)

我需要换衣服 array(1,0,2,3,4,0,0,5,6,0,7)array(1,1,2,3,4,4,4,5,6,6,7) .
我的代码:

select
   arrayMap (i-> (if(i=0, indexOf(arr,i)-1, i)), arr)

from (select  array(1,0,2,3,4,0,0,5,6,0,7) as arr)

但它又回来了 array(1,1,2,3,4,1,1,5,6,1,7) . 怎么做?

ssm49v7z

ssm49v7z1#

它看起来很奇怪,但很有效(备注:零索引0值将被忽略):

SELECT
    arrayEnumerate(arr) AS indexes,
    [0, 1, 0, 2, 0, 0, 0, 3, 4, 0, 0, 5, 6, 0, 7, 8, 0] AS arr,
    arrayMap(i -> if((arr[i] = 0) AND (i > 1), arr[(i - arrayFirst(x -> (arr[(i - x)] != 0), indexes))], arr[i]), indexes) AS result
FORMAT Vertical

结果:

Row 1:
──────
indexes:    [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]
sourceData: [0,1,0,2,0,0,0,3,4,0,0,5,6,0,7,8,0]
result:     [0,1,1,2,2,2,2,3,4,4,4,5,6,6,7,8,8]

相关问题