Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

This question already has an answer here:

I have a "sparse array" like this

arr[1.5]=0.4, arr[3.5]=0.7, arr[7]=0.3

which is not really a sparse array since the keys are not all integers. This is like a hash table or associative array.

How can I convert arr into a list? I tried Normal[arr], but it won't work. I would like to be able to compute Total@arr, but first it needs to be converted to a normal list.

share|improve this question

marked as duplicate by Mr.Wizard May 3 '13 at 3:52

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

    
In fact this is exactly a hash table. –  Oleksandr R. May 2 '13 at 20:21

2 Answers 2

This might be the general sort of operation you seek.

keyvalpairs = 
 DownValues[arr] /. Verbatim[HoldPattern][arr[k_]] :> k

(* Out[121]= {1.5 :> 0.4, 3.5 :> 0.7, 7 :> 0.3} *)
share|improve this answer
    
I was trying to do exactly that but I couldn't figure out the pattern/replacement I needed +1. –  s0rce May 3 '13 at 0:53
    
@sOrce it took me a few tries. That combination of HoldPattern and Verbatim is not something I am accustomed to needing. –  Daniel Lichtblau May 3 '13 at 14:56

Here is one way to do it:

{arr[1.5] = 0.4, arr[3.5] = 0.7, arr[7] = 0.3}
Total[DownValues[arr][[All, 2]]]
share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.