assoc1 = AssociationThread[dnames1, dnumber]
<|"A1" -> 20, "A2" -> 20, "A3" -> 11, "A4" -> 21, "A5" -> 19, "A6" -> 20|>
You can get newdnames1
directly using
dnames1[[Ordering[dnumber]]]
If you you want to work with associations, for newdnumber
you can the desired result simply using Sort
:
assoc2b = Sort[assoc1]
<|"A3" -> 11, "A5" -> 19, "A1" -> 20, "A2" -> 20, "A6" -> 20, "A4" -> 21|>
Keys @ assoc2
{"A3", "A5", "A1", "A2", "A6", "A4"}
For general newdnumber
, you can sort assoc1
using SortBy[PositionIndex[newdnumber]]
:
assoc2 = SortBy[PositionIndex[newdnumber]]@assoc1
<|"A3" -> 11, "A5" -> 19, "A4" -> 21, "A1" -> 20, "A2" -> 20, "A6" -> 20|>
Keys @ assoc2
{"A3", "A5", "A1", "A2", "A6", "A4"}
SeedRandom[1]
shuffledDnumber = RandomSample[dnumber]
{19, 11, 20, 20, 21, 20}
assoc3 = SortBy[PositionIndex[shuffledDnumber]]@assoc1
<|"A5" -> 19, "A3" -> 11, "A4" -> 21, "A1" -> 20, "A2" -> 20, "A6" -> 20|>
Keys @ assoc3
{"A5", "A3", "A4", "A1", "A2", "A6"}