(sadece arama yemi olarak, bu aynı zamanda Matlab tarafından ismember
denir). Çok az farklıdır: i 'elemanının son dizini olduğudizininin v2
içinde göründüğü bir vektör döndürür.
julia> v1 = [8,6,7,11]; v2 = -10:10;
idxs = indexin(v1, v2)
4-element Array{Int64,1}:
19
17
18
0
O v2
görünmüyor v1
bir elemanın indeksi sıfır döndürür. Yani sıfırdan farklı indeksler tarafından basitçe endeksleme tarafından v2
içindedir v1
bazı bölgelerinde "yeniden" yapabilirsiniz: the implementation bakarsanız, bunu saklamak ve aramak için bir sözlük kullandığını göreceksiniz
julia> v2[idxs[idxs .> 0]]
3-element Array{Int64,1}:
8
6
7
endeksleri. Bu, v1
'daki her öğe için v2
üzerinden arama yapmanın aksine, yalnızca bir geçişi v1
ve v2
her biri üzerinden yaptığınız anlamına gelir. Hemen hemen her durumda çok daha verimli olmalı.
o R'ın davranışını eşleşecek ve ilk endeks dönmek önemliyse, biz baz uygulanmasını kapalı beşik ve sadece alt endeksler yüksek olanları üzerine geriye böylece sözlüğü oluşturabilirsiniz:
function firstindexin(a::AbstractArray, b::AbstractArray)
bdict = Dict{eltype(b), Int}()
for i=length(b):-1:1
bdict[b[i]] = i
end
[get(bdict, i, 0) for i in a]
end
julia> firstindexin([1,2,3,4], [1,1,2,2,3,3])
4-element Array{Int64,1}:
1
3
5
0
julia> indexin([1,2,3,4], [1,1,2,2,3,3])
4-element Array{Int64,1}:
2
4
6
0
http: // stackoverflow .com/questions/20102250/find-first-in-an-item-in-an-dizide-in-julia – Khashaa