这是我的代码(x
是排序数组):
lookup_value = 310.0
x = [298.0, 303.0, 308.0, 313.0, 323.0]
if (issorted(x))
idx = searchsorted(x, lookup_value)
end
在这种特殊情况下,idx的值为:
4:3
在这里,我想要提取“4”(超出我的查找值的第一个元素)或“3”(最后一个不超过查找值的元素)。但是,我无法通过将范围转换为数组来实现,因为我从以下命令得到的只是一个空数组:
julia> collect(idx)
0-element Array{Int64,1}
请注意,查找值310.0只是一个例子;这个变量可以采用不同的值。
答案 0 :(得分:4)
我刚刚意识到可以使用idx.start
和idx.stop
来访问范围的开头和结尾。
julia> idx
4:3
julia> idx.start
4
julia> idx.stop
3
超出查找值的第一个元素是x[idx.start]
。
不超出查找值的最后一个元素是x[idx.stop]
。
答案 1 :(得分:0)
这是对已接受答案的回应。我打算将其添加为评论,但显然我不允许这样做:
你绝对应该不使用idx.start
和idx.stop
。 Julia中的类型字段名称(通常)被视为实现细节,而不是接口的一部分。他们可以在没有警告或弃用的情况下进行更改。
您应该按照王凤阳的建议使用first(idx)
和last(idx)
。