如何在布尔值列表中搜索第一个 true?

How do I search a list of booleans for the first true?

我正在尝试查找第一个真值的索引:

1b?001b

Expected result: 2
Actual result: ,0b

两个问题:

对于你的第一个问题,你想使用 where 关键字,当传递一个布尔列表时,它将 return 真实值的索引:

q)where 00101b
2 4

用上面的前面的first就可以得到你想要的

对于你的第二个问题,我认为 q 将左参数转换为 int/long,然后在右参数列表中转换为 'rolling'(参见 https://code.kx.com/q/ref/deal/)。

示例:

q)0b?111b
`boolean$() //return 0 random elements from 111b
q)1b?111b
,1b //return 1 random element from 111b

除了@Kylebonnes 的回答,如果您还想使用“?”查找运算符,可以这样做:

q)001b?1b
2

使用 Find,就像@xxPJFxx 所做的那样,意味着搜索在第一次命中时停止,其中 where 找到所有命中:

q)show L:1000000?0b
101001111111001110100001110101011011010000101001010110010110111010000010000100000000100..
q)\ts:1000 first where L
396 4194512
q)\ts:1000 L?1b
0 704

你的第二个问题的早期答案是正确的:你发现了 Roll 运算符的一个未记录的边缘情况,它接受一个整数左参数。如果还支持布尔左参数,我将与实现者核实并更新文档。

Overloaded glyphs 页面可以帮助您识别字形表示哪个运算符。