# How best to maintain collection of indices into 2-d array

I’d like to maintain a collection of index pairs (i,j) into a 2-dimensional array. The list must not contain any repeated elements, and elements can be added and deleted. `Set` seems to do the trick:

``````A = Set([(1,1),(3,3)])
union!(A, [(2,2),(3,3)]) # add only new element (2,2)
setdiff!(A, [(3,3)])     # remove item

B = rand(3,3)
let t = 0
for ind in A
i,j = ind
t += B[i,j]
end
end
``````

Is this the best way to do this sort of thing in Julia?

Probably yes. If you need other features of the collection (eg ordering, fallback defaults), check out

1 Like

Depending on the sparsity and what you’re using the indices for, it may be more efficient to use a `SparseMatrix{Bool}` than a `Set`.

``````using SparseArrays
A = sparse([1, 3], [1, 3], ones(Bool, 2))
A[2,2] |= true # add element
A[3,3] &= false # remove element

B = rand(3,3)
t = sum(B .* A) # will have a better memory access pattern than the above for-loops
``````
2 Likes

Thanks for this suggestion. Your reply also pointed me to `|=` and `&=`, which are new to me.