Mathematica Stack Exchange is a question and answer site for users of Mathematica. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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

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.