在Julia中,如何获取超出某个值的排序数组中第一个元素的索引?

时间:2016-04-20 09:11:05

标签: arrays julia

这是我的代码(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只是一个例子;这个变量可以采用不同的值。

2 个答案:

答案 0 :(得分:4)

我刚刚意识到可以使用idx.startidx.stop来访问范围的开头和结尾。

julia> idx
4:3
julia> idx.start
4
julia> idx.stop
3

超出查找值的第一个元素是x[idx.start]超出查找值的最后一个元素是x[idx.stop]

答案 1 :(得分:0)

这是对已接受答案的回应。我打算将其添加为评论,但显然我不允许这样做:

你绝对应该使用idx.startidx.stop。 Julia中的类型字段名称(通常)被视为实现细节,而不是接口的一部分。他们可以在没有警告或弃用的情况下进行更改。

您应该按照王凤阳的建议使用first(idx)last(idx)