Associative array/Iteration: Difference between revisions

 
(21 intermediate revisions by 17 users not shown)
Line 1:
{{task|Basic language learning}}[[Category:Iteration]][[Category:Data Structures]]
[[Category:Data Structures]]
Show how to iterate over the key-value pairs of an associative array, and print each pair out.
{{task|Basic language learning}}Show how to iterate over the key-value pairs of an associative array, and print each pair out.
 
Also show how to iterate just over the keys, or the values, if there is a separate way to do that in your language.
Line 9 ⟶ 10:
 
=={{header|11l}}==
<langsyntaxhighlight lang="11l">V d = [‘key1’ = ‘value1’, ‘key2’ = ‘value2’]
 
L(key, value) d
Line 18 ⟶ 19:
 
L(value) d.values()
print(value)</langsyntaxhighlight>
{{out}}
<pre>
Line 31 ⟶ 32:
=={{header|8th}}==
Iterating key,value pairs uses "m:each":
<syntaxhighlight lang="forth">
<lang Forth>
{"one": 1, "two": "bad"}
( swap . space . cr )
m:each
</syntaxhighlight>
</lang>
{{out}}<pre>
one 1
Line 42 ⟶ 43:
 
Iterating the keys uses "m:keys":
<syntaxhighlight lang="forth">
<lang Forth>
{"one": 1, "two": "bad"} m:keys
( . cr )
a:each
</syntaxhighlight>
</lang>
{{out}}<pre>
one
Line 53 ⟶ 54:
 
=={{header|Ada}}==
<langsyntaxhighlight Adalang="ada">with Ada.Text_IO; use Ada.Text_IO;
with Ada.Containers.Indefinite_Ordered_Maps;
 
Line 71 ⟶ 72:
Index := Next (Index);
end loop;
end Test_Iteration;</langsyntaxhighlight>
{{out}}
<pre>
Line 80 ⟶ 81:
 
=={{header|Aime}}==
<langsyntaxhighlight lang="aime">record r;
text s;
 
Line 91 ⟶ 92:
o_form("key ~, value ~ (~)\n", s, r[s], r_type(r, s));
} while (rsk_greater(r, s, s));
}</langsyntaxhighlight>
{{out}}
<pre>key A, value 33 (integer)
Line 101 ⟶ 102:
<br>
This sample defines a simple hash-based implementation with operators to iterate over the array.
<langsyntaxhighlight lang="algol68"># associative array handling using hashing #
 
# the modes allowed as associative array element values - change to suit #
Line 255 ⟶ 256:
e := NEXT a1
OD
END</langsyntaxhighlight>
{{out}}
<pre>
Line 271 ⟶ 272:
=={{header|Arturo}}==
 
<langsyntaxhighlight lang="rebol">; create a dictionary
d: #[
name: "john"
Line 295 ⟶ 296:
loop values d [v][
print ["value =" v]
]</langsyntaxhighlight>
 
{{out}}
Line 312 ⟶ 313:
 
=={{header|ATS}}==
See [[Associative_array/Creation#ATS|Associative_array/Creation#ATS]].
 
=={{header|AutoHotkey}}==
{{works with|AutoHotkey_L}}
From the [http://www.autohotkey.net/~Lexikos/AutoHotkey_L/docs/objects/Enumerator.htm documentation]<langsyntaxhighlight AutoHotkeylang="autohotkey">; Create an associative array
obj := Object("red", 0xFF0000, "blue", 0x0000FF, "green", 0x00FF00)
enum := obj._NewEnum()
While enum[key, value]
t .= key "=" value "`n"
MsgBox % t</langsyntaxhighlight>
 
=={{header|AWK}}==
In AWK "arrays" are always associative arrays, and the only way to iterate over them is by keys (''indexes'' in the AWK terminology), in undefined order.
<langsyntaxhighlight lang="awk">BEGIN {
a["hello"] = 1
a["world"] = 2
Line 334 ⟶ 335:
print key, a[key]
}
}</langsyntaxhighlight>
 
As AWK was often used in (Bourne) shell scripts,
sorting was done by a pipe of two awk programs and the sort command.
Today, 'gawk' allows to set the order of iteration:
<langsyntaxhighlight lang="awk">BEGIN {
a["hello"] = 1
a["world"] = 2
Line 348 ⟶ 349:
print key, a[key]
}
}</langsyntaxhighlight>
 
=={{header|Babel}}==
Line 354 ⟶ 355:
In Babel, associative arrays are referred to as maps. To create a map from a list-of-lists:
 
<langsyntaxhighlight lang="babel">births (('Washington' 1732) ('Lincoln' 1809) ('Roosevelt' 1882) ('Kennedy' 1917)) ls2map ! <</langsyntaxhighlight>
 
To iterate over a map, in the primary sense, use the overmap utility. We will copy the map (cp operator) so as not to modify the original:
 
<langsyntaxhighlight lang="babel">births cp dup {1 +} overmap !</langsyntaxhighlight>
 
To see the results, use the valmap operator:
 
<syntaxhighlight lang ="babel">valmap ! lsnum !</langsyntaxhighlight>
 
{{out}}
Line 369 ⟶ 370:
There are many ways to interact with a map in Babel. Most of these begin by converting the map to a list or list-of-lists. To look up a list of specific values from the map, by key, use the lumapls utility:
 
<langsyntaxhighlight lang="babel">births ('Roosevelt' 'Kennedy') lumapls ! lsnum !</langsyntaxhighlight>
 
{{out}}
Line 376 ⟶ 377:
To convert the entire map back to a list of key-value pairs:
 
<syntaxhighlight lang ="babel">births map2ls !</langsyntaxhighlight>
 
To view the list:
 
<langsyntaxhighlight lang="babel">{give swap << " " << itod << "\n" <<} each</langsyntaxhighlight>
 
{{out}}
Line 390 ⟶ 391:
To merge two maps together, use the mapmerge utility:
 
<langsyntaxhighlight lang="babel">foo (("bar" 17) ("baz" 42)) ls2map ! <
births foo mergemap !</langsyntaxhighlight>
 
To view the results:
 
<langsyntaxhighlight lang="babel">births map2ls ! {give swap << " " << itod << "\n" <<} each</langsyntaxhighlight>
 
{{out}}
Line 407 ⟶ 408:
For more information on maps in Babel, view [https://github.com/claytonkb/clean_babel/blob/master/std.sp std.sp] (see the section titled "map utilities").
 
=={{header|BaConBASIC}}==
==={{header|BaCon}}===
<lang qbasic>DECLARE associative ASSOC STRING
<syntaxhighlight lang="qbasic">DECLARE associative ASSOC STRING
 
associative("abc") = "first three"
Line 417 ⟶ 419:
FOR i = 0 TO amount - 1
PRINT keys$[i], ":", associative(keys$[i])
NEXT</langsyntaxhighlight>
 
{{out}}
Line 426 ⟶ 428:
LOOKUP creates a numerically indexed array of the keys of the associative array, with the number of elements stored in the field following the SIZE keyword.
 
==={{header|BASIC256}}===
''Solution is at [[Associative_array/Creation#BASIC256]]''.
 
==={{header|BBC BASIC}}===
<langsyntaxhighlight lang="bbcbasic"> REM Store some values with their keys:
PROCputdict(mydict$, "FF0000", "red")
PROCputdict(mydict$, "00FF00", "green")
Line 455 ⟶ 457:
key$ = MID$(dict$, J%+1, K%-J%-1)
IF K% >= LEN(dict$) THEN K% = 0
= K%</langsyntaxhighlight>
 
=={{header|Bracmat}}==
<langsyntaxhighlight lang="bracmat">( new$hash:?myhash
& (myhash..insert)$(title."Some title")
& (myhash..insert)$(formula.a+b+x^7)
Line 475 ⟶ 477:
& put$\n
)
);</langsyntaxhighlight>
{{out}}
<pre>key: meat
Line 493 ⟶ 495:
 
=={{header|Brat}}==
<langsyntaxhighlight lang="brat">h = [ hello: 1 world: 2 :! : 3]
 
#Iterate over key, value pairs
Line 508 ⟶ 510:
h.each_value { v |
p "Value: #{v}"
}</langsyntaxhighlight>
 
=={{header|C}}==
Line 514 ⟶ 516:
 
=={{header|C sharp|C#}}==
<langsyntaxhighlight lang="csharp">using System;
using System.Collections.Generic;
 
Line 547 ⟶ 549:
}
}
</syntaxhighlight>
</lang>
 
=={{header|C++}}==
{{works with|C++11}}
<langsyntaxhighlight lang="cpp">#include <iostream>
#include <map>
#include <string>
Line 571 ⟶ 573:
 
return 0;
}</langsyntaxhighlight>
 
 
Pre C++11:
<langsyntaxhighlight lang="cpp">std::map<std::string, int> myDict;
myDict["hello"] = 1;
myDict["world"] = 2;
Line 586 ⟶ 588:
int& value = it->second;
std::cout << "key = " << key << ", value = " << value << std::endl;
}</langsyntaxhighlight>
 
=={{header|Ceylon}}==
<langsyntaxhighlight lang="ceylon">shared void run() {
 
value myMap = map {
Line 609 ⟶ 611:
}
}</langsyntaxhighlight>
 
=={{header|Chapel}}==
 
<langsyntaxhighlight lang="chapel">var A = [ "H2O" => "water", "NaCl" => "salt", "O2" => "oxygen" ];
 
for k in A.domain do
Line 622 ⟶ 624:
 
for (k,v) in zip(A.domain, A) do
writeln("have element: ", k, " -> ", v);</langsyntaxhighlight>
 
{{out}}
Line 636 ⟶ 638:
 
=={{header|Clojure}}==
<langsyntaxhighlight lang="clojure">
(doseq [[k v] {:a 1, :b 2, :c 3}]
(println k "=" v))
Line 645 ⟶ 647:
(doseq [v (vals {:a 1, :b 2, :c 3})]
(println v))
</syntaxhighlight>
</lang>
 
=={{header|CoffeeScript}}==
<langsyntaxhighlight lang="coffeescript">hash =
a: 'one'
b: 'two'
Line 657 ⟶ 659:
for key of hash
console.log key
</syntaxhighlight>
</lang>
 
=={{header|Common Lisp}}==
Line 666 ⟶ 668:
The association list is a list of conses, each of whose <code>car</code> is a key and whose <code>cdr</code> is a value. The standard mapping and print functions can be used to print key/value pairs, keys, and values.
 
<langsyntaxhighlight lang="lisp">;; iterate using dolist, destructure manually
(dolist (pair alist)
(destructuring-bind (key . value) pair
Line 673 ⟶ 675:
;; iterate and destructure with loop
(loop for (key . value) in alist
do (format t "~&Key: ~a, Value: ~a." key value))</langsyntaxhighlight>
 
===With property lists (plists)===
Line 679 ⟶ 681:
Property lists are lists of alternating keys and values, where each value's key is the element of the list immediately following it. Printing could be done with standard mapping functions, but <code>loop</code>'s destructuring makes things a bit easier.
 
<langsyntaxhighlight lang="lisp">(loop for (key value) on plist :by 'cddr
do (format t "~&Key: ~a, Value: ~a." key value))</langsyntaxhighlight>
 
===With hash tables===
Line 686 ⟶ 688:
Lisp also has built-in hash tables, and there are several ways to map over these. The first is <code>maphash</code> which takes a function of two arguments (the key and value) and the hash table.
 
<langsyntaxhighlight lang="lisp">(maphash (lambda (key value)
(format t "~&Key: ~a, Value: ~a." key value))
hash-table)</langsyntaxhighlight>
 
The <code>loop</code> construct also supports extracting key/value pairs from hash tables.
 
<langsyntaxhighlight lang="lisp">(loop for key being each hash-key of hash-table using (hash-value value)
do (format t "~&Key: ~a, Value: ~a." key value))</langsyntaxhighlight>
 
There is also a macro <code>with-hash-table-iterator</code> which locally binds a name to produce associated keys and values of the hash table; while rarely used, it is the most powerful operation.
 
<langsyntaxhighlight lang="lisp">(with-hash-table-iterator (next-entry hash-table)
(loop
(multiple-value-bind (nextp key value) (next-entry)
(if (not nextp)
(return)
(format t "~&Key: ~a, Value: ~a." key value)))))</langsyntaxhighlight>
===Alternate solution===
I use [https://franz.com/downloads/clp/survey Allegro CL 10.1]
 
<langsyntaxhighlight lang="lisp">
;; Project : Associative array/Iteration
 
Line 718 ⟶ 720:
(format t "~a" " : ")
(format t "~a" (aref x n 1)))
</syntaxhighlight>
</lang>
Output:
<pre>
Line 727 ⟶ 729:
 
=={{header|Crystal}}==
<langsyntaxhighlight lang="crystal">dict = {'A' => 1, 'B' => 2}
 
dict.each { |pair|
Line 739 ⟶ 741:
dict.each_value { |value|
puts value
}</langsyntaxhighlight>
 
{{out}}
Line 752 ⟶ 754:
{{works with|D|2}}
 
<langsyntaxhighlight lang="d">import std.stdio: writeln;
 
void main() {
Line 791 ⟶ 793:
foreach (value; aa.values)
writeln("7) Got value ", value);
}</langsyntaxhighlight>
 
=={{header|Dao}}==
<langsyntaxhighlight lang="ruby">
dict = { 'def' => 1, 'abc' => 2 }
 
Line 802 ⟶ 804:
io.writeln( key, value )
}
</syntaxhighlight>
</lang>
 
=={{header|Dart}}==
<langsyntaxhighlight lang="javascript">
main(){
var fruits = {
Line 824 ⟶ 826:
fruits.values.forEach( ( value ) => print( value ) );
}
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 850 ⟶ 852:
 
=={{header|Delphi}}==
<langsyntaxhighlight Delphilang="delphi">program AssociativeArrayIteration;
 
{$APPTYPE CONSOLE}
Line 878 ⟶ 880:
lDictionary.Free;
end;
end.</langsyntaxhighlight>
 
=={{header|Dyalect}}==
 
<langsyntaxhighlight lang="dyalect">var t = (x: 1, y: 2, z: 3)
 
for x in t.Keys() {
print("\(x)=\(t[x])")
}</langsyntaxhighlight>
 
{{out}}
Line 900 ⟶ 902:
The <code>for</code> loop takes either one pattern, for the value, or two, for the key and value; for iterating over keys alone the value may be given an ignore-pattern (<code>_</code>).
 
<langsyntaxhighlight lang="e">def map := [
"a" => 1,
"b" => 2,
Line 920 ⟶ 922:
for key in map.domain() { # iterate over the set whose values are the keys
println(`$key .`)
}</langsyntaxhighlight>
 
=={{header|EasyLang}}==
<syntaxhighlight>
# use array of array for this
clothing$[][] = [ [ "type" "t-shirt" ] [ "color" "red" ] [ "size" "xl" ] ]
for i to len clothing$[][]
print clothing$[i][1] & ": " & clothing$[i][2]
.</syntaxhighlight>
{{out}}
<pre>
 
=={{header|EchoLisp}}==
<langsyntaxhighlight lang="scheme">
(lib 'hash) ;; load hash.lib
(define H (make-hash))
Line 948 ⟶ 960:
value-> 666
value-> 33
</syntaxhighlight>
</lang>
 
=={{header|Elena}}==
ELENA 5.0 :
<langsyntaxhighlight lang="elena">import system'collections;
import system'routines;
import extensions;
Line 969 ⟶ 981:
map.forEach:
(keyValue){ console.printLine(keyValue.Key," : ",keyValue.Value) }
}</langsyntaxhighlight>
 
=== Strong typed dictionary ===
<langsyntaxhighlight lang="elena">import system'collections;
import system'routines;
import extensions;
Line 989 ⟶ 1,001:
map.forEach:
(tuple){ console.printLine(tuple.Item1," : ",tuple.Item2) }
}</langsyntaxhighlight>
 
=={{header|Elixir}}==
<langsyntaxhighlight lang="elixir">IO.inspect d = Map.new([foo: 1, bar: 2, baz: 3])
Enum.each(d, fn kv -> IO.inspect kv end)
Enum.each(d, fn {k,v} -> IO.puts "#{inspect k} => #{v}" end)
Enum.each(Map.keys(d), fn key -> IO.inspect key end)
Enum.each(Map.values(d), fn value -> IO.inspect value end)</langsyntaxhighlight>
 
{{out}}
Line 1,013 ⟶ 1,025:
3
1
</pre>
 
=={{header|EMal}}==
<syntaxhighlight lang="emal">
Map map = text%text["Italy" => "Rome", "France" => "Paris"]
map.insert("Germany", "Berlin")
map["Spain"] = "Madrid"
writeLine("== pairs ==")
for each Pair pair in map
writeLine(pair)
end
writeLine("== keys ==")
for each text key in map.keys()
writeLine(key)
end
writeLine("== values ==")
for each text value in map.values()
writeLine(value)
end
</syntaxhighlight>
{{out}}
<pre>
== pairs ==
[Italy,Rome]
[France,Paris]
[Germany,Berlin]
[Spain,Madrid]
== keys ==
Italy
France
Germany
Spain
== values ==
Rome
Paris
Berlin
Madrid
</pre>
 
=={{header|Erlang}}==
<langsyntaxhighlight lang="erlang">
-module(assoc).
-compile([export_all]).
Line 1,030 ⟶ 1,079:
io:format("~p: ~b~n",[K,dict:fetch(K,D)])
end, dict:fetch_keys(D)).
</syntaxhighlight>
</lang>
 
{{out}}
Line 1,040 ⟶ 1,089:
=={{header|F_Sharp|F#}}==
Iterating over both.
<langsyntaxhighlight lang="fsharp">
let myMap = [ ("Hello", 1); ("World", 2); ("!", 3) ]
 
for k, v in myMap do
printfn "%s -> %d" k v
</syntaxhighlight>
</lang>
 
Iterating over either keys or values only can be achieved through use of the _ wildcard token.
<langsyntaxhighlight lang="fsharp">
// Only prints the keys.
for k, _ in myMap do
Line 1,056 ⟶ 1,105:
for _, v in myMap do
printfn "%d" v
</syntaxhighlight>
</lang>
 
=={{header|Factor}}==
<langsyntaxhighlight lang="factor">H{ { "hi" "there" } { "a" "b" } } [ ": " glue print ] assoc-each</langsyntaxhighlight>
<code>assoc-each</code> places both the key and the value on top of the data stack. A simple <code>drop</code> or <code>nip</code> enables iterating over only keys or values.
<langsyntaxhighlight lang="factor">H{ { "hi" "there" } { "a" "b" } } [ drop print ] assoc-each ! print keys
H{ { "hi" "there" } { "a" "b" } } [ nip print ] assoc-each ! print values</langsyntaxhighlight>
There's also <code>assoc-map</code>, <code>assoc-find</code>, <code>assoc-filter</code> and many more.
 
Line 1,069 ⟶ 1,118:
Given a map, <code>each</code> iterates over pairs of values-keys. <code>keys</code> and <code>vals</code> retrieve a list of keys or values, respectively.
 
<langsyntaxhighlight lang="fantom">
class Main
{
Line 1,092 ⟶ 1,141:
}
}
</syntaxhighlight>
</lang>
 
=={{header|Forth}}==
{{libheader|Forth Foundation Library}}
 
<langsyntaxhighlight lang="forth">include ffl/hct.fs
include ffl/hci.fs
 
Line 1,118 ⟶ 1,167:
;
 
iterate</langsyntaxhighlight>
 
<langsyntaxhighlight lang="forth">
\ Written in ANS-Forth; tested under VFX.
\ Requires the novice package: http://www.forth.org/novice.html
Line 1,258 ⟶ 1,307:
 
some-languages kill-association
</syntaxhighlight>
</lang>
{{out}}
<pre style="height:30ex;overflow:scroll">
Line 1,325 ⟶ 1,374:
Since this data structure stores the keys and values together it makes little sense to iterate through the same array three times to print different parts of it, hence I will only print the key:value pairs.
 
<langsyntaxhighlight lang="freebasic">#include"assoc.bas"
 
function get_dict_data_string( d as dicitem ) as string
Line 1,351 ⟶ 1,400:
for i as uinteger = 0 to ubound(Dictionary)
print_keyval_pair(Dictionary(i))
next i</langsyntaxhighlight>
 
{{out}}
Line 1,360 ⟶ 1,409:
 
=={{header|Free Pascal}}==
FPC 3.2.0+. Similar to Delphi:<langsyntaxhighlight lang="pascal">program AssociativeArrayIteration;
{$mode delphi}{$ifdef windows}{$apptype console}{$endif}
uses Generics.Collections;
Line 1,389 ⟶ 1,438:
lDictionary.Free;
end;
end.</langsyntaxhighlight>
<pre>
Pair: foo = 6
Line 1,402 ⟶ 1,451:
 
=={{header|Frink}}==
<langsyntaxhighlight lang="frink">d = new dict[[[1, "one"], [2, "two"]]]
for [key, value] = d
println["$key\t$value"]
Line 1,409 ⟶ 1,458:
for key = keys[d]
println["$key"]
</syntaxhighlight>
</lang>
 
{{out}}
Line 1,419 ⟶ 1,468:
1
</pre>
 
=={{header|FutureBasic}}==
There are many ways to iterate over an associative array (dictionary) in FutureBasic. Below are a selection.
 
1. for ... in ...
<syntaxhighlight lang="futurebasic">
void local fn DoIt
CFDictionaryRef dict = @{@"A":@"Alpha", @"B":@"Bravo", @"C":@"Charlie", @"D":@"Delta"}
CFStringRef key
for key in dict
print key, dict[key]
next
end fn
 
fn DoIt
 
HandleEvents
</syntaxhighlight>
 
2. Enumerator callback
<syntaxhighlight lang="futurebasic">
void local fn MyDictEnumerator( dict as CFDictionaryRef, key as CFTypeRef, obj as CFTypeRef, stp as ^BOOL, userData as ptr )
print key, obj
end fn
 
void local fn DoIt
CFDictionaryRef dict = @{@"A":@"Alpha", @"B":@"Bravo", @"C":@"Charlie", @"D":@"Delta"}
DictionaryEnumerateKeysAndObjects( dict, @fn MyDictEnumerator, NULL )
end fn
 
fn DoIt
 
HandleEvents
</syntaxhighlight>
 
3. Array of keys
<syntaxhighlight lang="futurebasic">
void local fn DoIt
CFDictionaryRef dict = @{@"A":@"Alpha", @"B":@"Bravo", @"C":@"Charlie", @"D":@"Delta"}
CFArrayRef keys = fn DictionaryAllKeys( dict )
CFStringRef key
for key in keys
print key, dict[key]
next
end fn
 
fn DoIt
 
HandleEvents
</syntaxhighlight>
 
4. Array of values
<syntaxhighlight lang="futurebasic">
void local fn DoIt
CFDictionaryRef dict = @{@"A":@"Alpha", @"B":@"Bravo", @"C":@"Charlie", @"D":@"Delta"}
CFArrayRef values = fn DictionaryAllValues( dict )
CFStringRef value
for value in values
print value
next
end fn
 
fn DoIt
 
HandleEvents
</syntaxhighlight>
 
5. Key/object enumerators
<syntaxhighlight lang="futurebasic">
void local fn DoIt
CFDictionaryRef dict = @{@"A":@"Alpha", @"B":@"Bravo", @"C":@"Charlie", @"D":@"Delta"}
CFStringRef key
CFTypeRef obj
EnumeratorRef keyEnumerator = fn DictionaryKeyEnumerator( dict )
key = fn EnumeratorNextObject( keyEnumerator )
while ( key )
print key,dict[key]
key = fn EnumeratorNextObject( keyEnumerator )
wend
print
EnumeratorRef objectEnumerator = fn DictionaryObjectEnumerator( dict )
obj = fn EnumeratorNextObject( objectEnumerator )
while ( obj )
print obj
obj = fn EnumeratorNextObject( objectEnumerator )
wend
end fn
 
fn DoIt
 
HandleEvents
</syntaxhighlight>
 
=={{header|Gambas}}==
'''[https://gambas-playground.proko.eu/?gist=e48bd6ed7e6b583106b8178bca536eea Click this link to run this code]'''
<langsyntaxhighlight lang="gambas">Public Sub Main()
Dim cList As Collection = ["2": "quick", "4": "fox", "1": "The", "9": "dog", "7": "the", "5": "jumped", "3": "brown", "6": "over", "8": "lazy"]
Dim siCount As Short
Line 1,437 ⟶ 1,584:
Next
 
End</langsyntaxhighlight>
Output:
<pre>
Line 1,446 ⟶ 1,593:
=={{header|Go}}==
'''Language:'''
<langsyntaxhighlight lang="go">myMap := map[string]int {
"hello": 13,
"world": 31,
Line 1,464 ⟶ 1,611:
for _, value := range myMap {
fmt.Printf("value = %d\n", value)
}</langsyntaxhighlight>
'''Standard library templates:'''
 
Line 1,472 ⟶ 1,619:
* In a template, if map keys are a comparable basic type, then iteration proceeds in key order. With the language for/range, iteration is in non-deterministic order.
 
<langsyntaxhighlight lang="go">package main
 
import (
Line 1,506 ⟶ 1,653:
{{end -}}
`)).Execute(os.Stdout, m)
}</langsyntaxhighlight>
{{out}}
Note order by key.
Line 1,523 ⟶ 1,670:
=={{header|Groovy}}==
Solution:
<langsyntaxhighlight lang="groovy">def map = [lastName: "Anderson", firstName: "Thomas", nickname: "Neo", age: 24, address: "everywhere"]
 
println "Entries:"
Line 1,534 ⟶ 1,681:
println()
println "Values:"
map.values().each { println it }</langsyntaxhighlight>
 
{{out}}
Line 1,559 ⟶ 1,706:
 
=={{header|Harbour}}==
<langsyntaxhighlight lang="visualfoxpro">LOCAL arr := { 6 => 16, "eight" => 8, "eleven" => 11 }
LOCAL x
 
Line 1,569 ⟶ 1,716:
// or value only
? x
NEXT</langsyntaxhighlight>
 
=={{header|Haskell}}==
with Data.Map:
<langsyntaxhighlight lang="haskell">import qualified Data.Map as M
 
myMap :: M.Map String Int
Line 1,585 ⟶ 1,732:
, show . M.elems -- Values
] <*>
pure myMap</langsyntaxhighlight>
{{Out}}
<pre>[("!",71),("hello",13),("world",31)]
Line 1,592 ⟶ 1,739:
 
=={{header|Icon}} and {{header|Unicon}}==
<langsyntaxhighlight lang="icon">procedure main()
t := table()
every t[a := !"ABCDE"] := map(a)
Line 1,606 ⟶ 1,753:
every writes(" ",!t)
write()
end</langsyntaxhighlight>
 
{{out}}
Line 1,619 ⟶ 1,766:
 
=={{header|Io}}==
<langsyntaxhighlight Iolang="io">myDict := Map with(
"hello", 13,
"world", 31,
Line 1,642 ⟶ 1,789:
myDict values foreach( value,
writeln("value = ", value)
)</langsyntaxhighlight>
 
=={{header|J}}==
Line 1,650 ⟶ 1,797:
Using the J example from [[Creating an Associative Array]]...
 
Keys <syntaxhighlight lang J="j">nl__example 0</langsyntaxhighlight>
 
Values <syntaxhighlight lang J="j">get__example each nl__example 0</langsyntaxhighlight>
 
Both keys and values <langsyntaxhighlight Jlang="j">(,&< get__example) each nl__example 0</langsyntaxhighlight>
 
Note that this last is not likely to be useful in any practical context outside of learning the language.
 
=={{header|JavaJakt}}==
<syntaxhighlight lang="jakt">
<lang java>Map<String, Integer> map = new HashMap<String, Integer>();
fn main() {
map.put("hello", 1);
let dictionary = ["foo": 1, "bar": 2]
map.put("world", 2);
for entry in dictionary {
map.put("!", 3);
// To get values, use
// let value = entry.1
println("{}", entry)
}
 
// Just keys
// iterating over key-value pairs:
for key in dictionary.keys() {
for (Map.Entry<String, Integer> e : map.entrySet()) {
String key = e.getKey println("{}", key);
}
Integer value = e.getValue();
System.out.println("key = " + key + ", value = " + value);
}
</syntaxhighlight>
{{out}}
<pre>
("bar", 2)
("foo", 1)
bar
foo
</pre>
 
=={{header|Java}}==
// iterating over keys:
<p>
for (String key : map.keySet()) {
See also, [https://rosettacode.org/wiki/Associative_array/Creation#Java Java - Associative array/Creation].
System.out.println("key = " + key);
</p>
}
<p>
 
You can access the <kbd>key</kbd> and <kbd>value</kbd> pairs by using the <code>Map.entrySet</code> method,
// iterating over values:
which will return a <code>Map.Entry</code>.<br />
for (Integer value : map.values()) {
It's worth noting that a <code>Map.Entry</code> also has the <code>setValue</code> method.
System.out.println("value = " + value);
}</langp>
<syntaxhighlight lang="java">
for (Map.Entry<String, Integer> entry : map.entrySet())
System.out.println(entry);
</syntaxhighlight>
<p>
You can access just the <kbd>key</kbd>s by using the <code>Map.keySet</code> method, which will return a <code>Set</code>.
</p>
<syntaxhighlight lang="java">
for (String key : map.keySet())
System.out.println(key);
</syntaxhighlight>
<p>
And you can access just the <kbd>value</kbd>s by using the <code>Map.values</code> method, which will return a <code>Collection</code>.
</p>
<syntaxhighlight lang="java">
for (int value : map.values())
System.out.println(value);
</syntaxhighlight>
<br />
 
Java 8 version
 
<langsyntaxhighlight lang="java">Map<String, Integer> map = new HashMap<>();
map.put("hello", 1);
map.put("world", 2);
Line 1,697 ⟶ 1,874:
 
// iterating over values:
map.values().forEach(v -> System.out.printf("value = %s%n", v));</langsyntaxhighlight>
 
{{out}}
Line 1,712 ⟶ 1,889:
=={{header|JavaScript}}==
JavaScript does not have associative arrays until ECMAScript 6 brings Maps. In versions up to ES5.1, you may add properties to an empty object to achieve the same effect.
<langsyntaxhighlight lang="javascript">var myhash = {}; //a new, empty object
myhash["hello"] = 3;
myhash.world = 6; //obj.name is equivalent to obj["name"] for certain values of name
Line 1,729 ⟶ 1,906:
keys.map(function (key) {
console.log("Key is: " + key + '. Value is: ' + myhash[key]);
});</langsyntaxhighlight>
 
=={{header|Jq}}==
Line 1,744 ⟶ 1,921:
 
In jq > 1.4, keys_unsorted, for producing an array of the keys (in the order of creation), is also available.
<langsyntaxhighlight lang="jq">def mydict: {"hello":13, "world": 31, "!": 71};
 
# Iterating over the keys
Line 1,775 ⟶ 1,952:
# ["world",31]
# ["!",71]
</syntaxhighlight>
</lang>
 
=={{header|Julia}}==
{{works with|Julia|0.6}}
<langsyntaxhighlight lang="julia">dict = Dict("hello" => 13, "world" => 31, "!" => 71)
 
# applying a function to key-value pairs:
Line 1,798 ⟶ 1,975:
@show value
end
</syntaxhighlight>
</lang>
 
{{out}}
Line 1,815 ⟶ 1,992:
=={{header|K}}==
Creating a dictionary.
<langsyntaxhighlight Klang="k"> d: .((`"hello";1); (`"world";2);(`"!";3))</langsyntaxhighlight>
 
The keys are available via "!".
<langsyntaxhighlight Klang="k"> !d
`hello `world `"!"
 
Line 1,824 ⟶ 2,001:
("hello"
"world"
,"!")</langsyntaxhighlight>
 
Print the key value pairs.
<langsyntaxhighlight Klang="k"> `0:{,/$x,": ",d[x]}'!d
hello: 1
world: 2
!: 3</langsyntaxhighlight>
 
The values are available via "[]".
<langsyntaxhighlight Klang="k"> d[]
1 2 3
 
{x+1}'d[]
2 3 4</langsyntaxhighlight>
 
=={{header|Kotlin}}==
<syntaxhighlight lang ="scala">fun main(a: Array<String>) {
val map = mapOf("hello" to 1, "world" to 2, "!" to 3)
 
with(map) {
entries.forEach { println("key = ${it.key}, value = ${it.value}") }
keys.forEach { println("key = $it") }
values.forEach { println("value = $it") }
}
}</langsyntaxhighlight>
{{Out}}
<pre>key = hello, value = 1
Line 1,861 ⟶ 2,038:
 
=={{header|Lang5}}==
<langsyntaxhighlight lang="lang5">: first 0 extract nip ; : second 1 extract nip ; : nip swap drop ;
: say(*) dup first " => " 2 compress "" join . second . ;
 
[['foo 5] ['bar 10] ['baz 20]] 'say apply drop</langsyntaxhighlight>
 
=={{header|Lasso}}==
<syntaxhighlight lang="lasso">
<lang Lasso>
//iterate over associative array
//Lasso maps
Line 1,897 ⟶ 2,074:
//the {^ ^} indicates that output should be printed (AutoCollect) ,
// if output is not desired, just { } is used
</syntaxhighlight>
</lang>
 
=={{header|LFE}}==
 
===Keys and Values===
<langsyntaxhighlight lang="lisp">
(let ((data '(#(key1 "foo") #(key2 "bar")))
(hash (: dict from_list data)))
Line 1,910 ⟶ 2,087:
0
hash))
</syntaxhighlight>
</lang>
 
===Just Keys===
<langsyntaxhighlight lang="lisp">
(let ((data '(#(key1 "foo") #(key2 "bar")))
(hash (: dict from_list data)))
Line 1,920 ⟶ 2,097:
(: io format '"~s~n" (list key)))
(: dict fetch_keys hash)))
</syntaxhighlight>
</lang>
 
=={{header|Liberty BASIC}}==
Needs the sublist library from http://basic.wikispaces.com/SubList+Library since LB does not have built-in associative arrays.
<syntaxhighlight lang="lb">
<lang lb>
data "red", "255 50 50", "green", "50 255 50", "blue", "50 50 255"
data "my fave", "220 120 120", "black", "0 0 0"
Line 1,948 ⟶ 2,125:
 
end
</syntaxhighlight>
</lang>
Number of key-data pairs =5
Key 1: red Data: 255 50 50
Line 1,957 ⟶ 2,134:
 
=={{header|Lingo}}==
<langsyntaxhighlight lang="lingo">hash = [#key1:"value1", #key2:"value2", #key3:"value3"]
 
-- iterate over key-value pairs
Line 1,967 ⟶ 2,144:
repeat with val in hash
put val
end repeat</langsyntaxhighlight>
 
=={{header|LiveCode}}==
<langsyntaxhighlight LiveCodelang="livecode">put 3 into fruit["apples"]
put 5 into fruit["pears"]
put 6 into fruit["oranges"]
Line 1,993 ⟶ 2,170:
-- alternatively, use same loop as for values 1 with tkey && fruit[tKey]
 
put tTmp</langsyntaxhighlight>
Output
<langsyntaxhighlight LiveCodelang="livecode">Keys:
apples
pears
Line 2,006 ⟶ 2,183:
bananas:none
oranges:6
pears:5</langsyntaxhighlight>
 
=={{header|Lua}}==
<langsyntaxhighlight lang="lua">local t = {
["foo"] = "bar",
["baz"] = 6,
Line 2,017 ⟶ 2,194:
for key,val in pairs(t) do
print(string.format("%s: %s", key, val))
end</langsyntaxhighlight>
 
{{out}}
Line 2,028 ⟶ 2,205:
 
=={{header|M2000 Interpreter}}==
<syntaxhighlight lang="m2000 interpreter">
<lang M2000 Interpreter>
Module checkit {
\\ Inventories are objects with keys and values, or keys (used as read only values)
Line 2,086 ⟶ 2,263:
}
Checkit
</syntaxhighlight>
</lang>
 
=={{header|M4}}==
<langsyntaxhighlight M4lang="m4">divert(-1)
define(`for',
`ifelse($#,0,``$0'',
Line 2,123 ⟶ 2,300:
for(`x',1,asize(`a'),
`avalue(`a',x)
')</langsyntaxhighlight>
 
{{out}}
Line 2,142 ⟶ 2,319:
=={{header|Maple}}==
Iterate through indices when indices are all simple expressions:
<syntaxhighlight lang="maple">
<lang Maple>
> T := table( [ "A" = 1, "B" = 2, "C" = 3, "D" = 4 ] );
> for i in indices( T, nolist ) do print(i ) end:
Line 2,152 ⟶ 2,329:
 
"D"
</syntaxhighlight>
</lang>
 
Iterate through indices when indices may be expression sequences:
<syntaxhighlight lang="maple">
<lang Maple>
> T := table( [ "a" = 1, "b" = 2, ("c","d") = 3 ] ):
> for i in indices( T ) do print( i, T[ op( i ) ] ) end:
Line 2,163 ⟶ 2,340:
 
["c", "d"], 3
</syntaxhighlight>
</lang>
 
Return all index / entry pairs as equations:
<syntaxhighlight lang="maple">
<lang Maple>
> for i in indices( T, pairs ) do print( i) end:
"a" = 1
Line 2,173 ⟶ 2,350:
 
("c", "d") = 3
</syntaxhighlight>
</lang>
 
<syntaxhighlight lang="maple">
<lang Maple>
> for i in entries( T ) do print( i) end:
[1]
Line 2,182 ⟶ 2,359:
 
[2]
</syntaxhighlight>
</lang>
 
=={{header|Mathematica}} / {{header|Wolfram Language}}==
<langsyntaxhighlight Mathematicalang="mathematica">keys=DownValues[#,Sort->False][[All,1,1,1]]&;
hashes=#/@keys[#]&;
 
Line 2,192 ⟶ 2,369:
->{2,sometext}
hashes[a]
->{string,23}</langsyntaxhighlight>
 
=={{header|MATLAB}} / {{header|Octave}}==
Line 2,198 ⟶ 2,375:
Associative arrays can be defined as structs in Matlab and Octave.
 
<langsyntaxhighlight Matlablang="matlab"> keys = fieldnames(hash);
for k=1:length(keys),
key = keys{k};
value = getfield(hash,key); % get value of key
hash = setfield(hash,key,-value); % set value of key
end; </langsyntaxhighlight>
 
or
 
<langsyntaxhighlight Matlablang="matlab"> keys = fieldnames(hash);
for k=1:length(keys),
key = keys{k};
value = hash.(key); % get value of key
hash.(key) = -value; % set value of key
end; </langsyntaxhighlight>
 
=={{header|Maxima}}==
<langsyntaxhighlight Maximalang="maxima">h[1]: 6$
h[9]: 2$
 
Line 2,225 ⟶ 2,402:
for key in rest(arrayinfo(h), 2) do (
val: arrayapply(h, key),
print(key, val))$</langsyntaxhighlight>
 
=={{header|MiniScript}}==
<langsyntaxhighlight MiniScriptlang="miniscript">d = { 3: "test", "foo": 3 }
 
for keyVal in d
Line 2,240 ⟶ 2,417:
for val in d.values
print val
end for</langsyntaxhighlight>
 
=={{header|NetRexx}}==
<langsyntaxhighlight NetRexxlang="netrexx">/* NetRexx */
options replace format comments java crossref symbols
 
Line 2,256 ⟶ 2,433:
loop fn over surname
say fn.right(10) ':' surname[fn]
end fn</langsyntaxhighlight>
 
=={{header|NewLISP}}==
<langsyntaxhighlight NewLISPlang="newlisp">;; using an association list:
(setq alist '(("A" "a") ("B" "b") ("C" "c")))
 
Line 2,270 ⟶ 2,447:
;; loop over the assocation list:
(dolist (elem alist)
(println (format "%s -> %s" (first elem) (last elem))))</langsyntaxhighlight>
 
=={{header|Nim}}==
<langsyntaxhighlight lang="nim">
import tables
 
Line 2,297 ⟶ 2,474:
for k,v in t.pairs:
echo "at[" & $k & "]=" & v
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 2,317 ⟶ 2,494:
=={{header|Oberon-2}}==
{{works with|oo2c Version 2}}
<langsyntaxhighlight lang="oberon2">
MODULE AssociativeArray;
IMPORT
Line 2,359 ⟶ 2,536:
END AssociativeArray.
</syntaxhighlight>
</lang>
 
=={{header|Objeck}}==
<langsyntaxhighlight lang="objeck">
class Iteration {
function : Main(args : String[]) ~ Nil {
Line 2,388 ⟶ 2,565:
}
}
</syntaxhighlight>
</lang>
 
=={{header|Objective-C}}==
{{works with|Objective-C|2.0+}}
<langsyntaxhighlight lang="objc">NSDictionary *myDict = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:13], @"hello",
[NSNumber numberWithInt:31], @"world",
Line 2,405 ⟶ 2,582:
for (id value in [myDict objectEnumerator]) {
NSLog(@"value = %@", value);
}</langsyntaxhighlight>
 
{{works with|Objective-C|<2.0}}
<langsyntaxhighlight lang="objc">NSDictionary *myDict = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:13], @"hello",
[NSNumber numberWithInt:31], @"world",
Line 2,425 ⟶ 2,602:
while ((value = [enm nextObject])) {
NSLog(@"value = %@", value);
}</langsyntaxhighlight>
 
{{works with|Cocoa|Mac OS X 10.6+}}
<langsyntaxhighlight lang="objc">NSDictionary *myDict = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:13], @"hello",
[NSNumber numberWithInt:31], @"world",
Line 2,436 ⟶ 2,613:
[myDict enumerateKeysAndObjectsUsingBlock: ^(id key, id value, BOOL *stop) {
NSLog(@"key = %@, value = %@", key, value);
}];</langsyntaxhighlight>
 
=={{header|OCaml}}==
Association array:
<langsyntaxhighlight lang="ocaml">#!/usr/bin/env ocaml
 
let map = [| ('A', 1); ('B', 2); ('C', 3) |] ;;
Line 2,454 ⟶ 2,631:
 
(* in functional programming it is often more useful to fold over the elements *)
Array.fold_left (fun acc (k,v) -> acc ^ Printf.sprintf "key: %c - value: %d\n" k v) "Elements:\n" map ;;</langsyntaxhighlight>
 
Hash table:
<langsyntaxhighlight lang="ocaml">let map = Hashtbl.create 42;;
Hashtbl.add map 'A' 1;;
Hashtbl.add map 'B' 2;;
Line 2,466 ⟶ 2,643:
 
(* in functional programming it is often more useful to fold over the elements *)
Hashtbl.fold (fun k v acc -> acc ^ Printf.sprintf "key: %c - value: %d\n" k v) map "Elements:\n" ;;</langsyntaxhighlight>
 
Functional binary search tree:
<langsyntaxhighlight lang="ocaml">module CharMap = Map.Make (Char);;
let map = CharMap.empty;;
let map = CharMap.add 'A' 1 map;;
Line 2,479 ⟶ 2,656:
 
(* in functional programming it is often more useful to fold over the elements *)
CharMap.fold (fun k v acc -> acc ^ Printf.sprintf "key: %c - value: %d\n" k v) map "Elements:\n" ;;</langsyntaxhighlight>
 
=={{header|Ol}}==
<syntaxhighlight lang="ol">
<lang ol>
;;; create sample associative array
(define aa (list->ff '(
Line 2,542 ⟶ 2,719:
; ==> #((! . 9) (hello . 1) (world . 4))
 
</syntaxhighlight>
</lang>
 
=={{header|ooRexx}}==
<langsyntaxhighlight lang="oorexx">d = .directory~new
d["hello"] = 1
d["world"] = 2
Line 2,565 ⟶ 2,742:
say "key =" s~index", value =" s~item
s~next
end</langsyntaxhighlight>
{{out}}
<pre>key = !
Line 2,578 ⟶ 2,755:
 
=={{header|Oz}}==
<langsyntaxhighlight lang="oz">declare
MyMap = unit('hello':13 'world':31 '!':71)
in
{ForAll {Record.toListInd MyMap} Show} %% pairs
{ForAll {Record.arity MyMap} Show} %% keys
{ForAll {Record.toList MyMap} Show} %% values</langsyntaxhighlight>
 
=={{header|PARI/GP}}==
Line 2,589 ⟶ 2,766:
 
The keys can be retried from a map with Vec:
<langsyntaxhighlight lang="parigp">keys = Vec(M);</langsyntaxhighlight>
You can iterate over the values as usual:
<langsyntaxhighlight lang="parigp">for(i=1,#keys,
print(keys[i]," ",mapget(M,keys[i]))
)</langsyntaxhighlight>
 
=={{header|Perl}}==
<langsyntaxhighlight lang="perl">#! /usr/bin/perl
use strict;
 
Line 2,627 ⟶ 2,804:
foreach my $val ( values %pairs ) {
print "value = $val\n";
}</langsyntaxhighlight>
 
=={{header|Phix}}==
The first three lines create a simple dictionary, with keys and values of several different types (string/integer/sequence):
<!--<langsyntaxhighlight Phixlang="phix">(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #7060A8;">setd</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"one"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span>
Line 2,642 ⟶ 2,819:
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #7060A8;">traverse_dict</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">routine_id</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"visitor"</span><span style="color: #0000FF;">))</span>
<!--</langsyntaxhighlight>-->
{{out}}
<pre>
Line 2,650 ⟶ 2,827:
</pre>
You could also use some of the map.e routines:
<!--<langsyntaxhighlight Phixlang="phix">(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #7060A8;">setd</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"one"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span>
Line 2,661 ⟶ 2,838:
<span style="color: #0000FF;">?</span><span style="color: #000000;">keys</span><span style="color: #0000FF;">()</span>
<span style="color: #0000FF;">?</span><span style="color: #000000;">values</span><span style="color: #0000FF;">()</span>
<!--</langsyntaxhighlight>-->
{{out}}
<pre>
Line 2,670 ⟶ 2,847:
 
=={{header|Phixmonti}}==
<langsyntaxhighlight Phixmontilang="phixmonti">include ..\Utilitys.pmt
 
def getd /# dict key -- dict data #/
Line 2,737 ⟶ 2,914:
keys nl
values
</syntaxhighlight>
</lang>
 
=={{header|PHP}}==
<langsyntaxhighlight lang="php"><?php
$pairs = array( "hello" => 1,
"world" => 2,
Line 2,759 ⟶ 2,936:
echo "values = $value\n";
}
?></langsyntaxhighlight>
 
=={{header|Picat}}==
<syntaxhighlight lang="picat">go =>
Map = new_map([1=one,2=two,3=three,4=four]),
foreach(K=V in Map)
println(K=V)
end,
nl,
 
println(keys=Map.keys),
foreach(K in Map.keys.sort)
println(K=Map.get(K))
end,
nl,
 
println(values=Map.values),
foreach(V in Map.values.sort)
% This works but gets a warning: nonlocal_var_in_iterator_pattern
% println(V=[K : K=V in Map])
% No warning:
println(V=[K : K=V1 in Map,V1 == V])
end,
nl.</syntaxhighlight>
 
{{out}}
<pre>1 = one
2 = two
3 = three
4 = four
 
keys = [1,2,3,4]
1 = one
2 = two
3 = three
4 = four
 
values = [one,two,three,four]
four = [4]
one = [1]
three = [3]
two = [2]</pre>
 
 
=={{header|PicoLisp}}==
===Using properties===
<langsyntaxhighlight PicoLisplang="picolisp">(put 'A 'foo 5)
(put 'A 'bar 10)
(put 'A 'baz 15)
Line 2,774 ⟶ 2,994:
 
: (mapcar car (getl 'A)) # Get all values
-> (15 10 5)</langsyntaxhighlight>
===Using an index tree===
<langsyntaxhighlight PicoLisplang="picolisp">(idx 'A (def "foo" 5) T)
(idx 'A (def "bar" 10) T)
(idx 'A (def "baz" 15) T)
Line 2,787 ⟶ 3,007:
 
: (mapcar val (idx 'A)) # Get all values
-> (10 15 5)</langsyntaxhighlight>
 
=={{header|Pike}}==
Line 2,793 ⟶ 3,013:
the order is deterministic however.
 
<syntaxhighlight lang="pike">
<lang Pike>
mapping(string:string) m = ([ "A":"a", "B":"b", "C":"c" ]);
foreach(m; string key; string value)
Line 2,815 ⟶ 3,035:
Result: bac
 
</syntaxhighlight>
</lang>
 
=={{header|PostScript}}==
<langsyntaxhighlight lang="postscript">
% over keys and values
<</a 1 /b 2 /c 3>> {= =} forall
Line 2,825 ⟶ 3,045:
% just values
<</a 1 /b 2 /c 3>> {pop =} forall
</syntaxhighlight>
</lang>
 
=={{header|Potion}}==
We can traverse tables by key or by key and val. We cannot traverse tables only by val.
<langsyntaxhighlight lang="potion">mydictionary = (red=0xff0000, green=0x00ff00, blue=0x0000ff)
 
mydictionary each (key, val): (key, ":", val, "\n") join print.
mydictionary each (key): (key, "\n") join print.</langsyntaxhighlight>
 
=={{header|PowerShell}}==
Using the following hash table:
<langsyntaxhighlight lang="powershell">$h = @{ 'a' = 1; 'b' = 2; 'c' = 3 }</langsyntaxhighlight>
Iterating over the key/value pairs is slightly cumbersome as it requires an explicit call to <code>GetEnumerator</code>:
<langsyntaxhighlight lang="powershell">$h.GetEnumerator() | ForEach-Object { Write-Host Key: $_.Name, Value: $_.Value }</langsyntaxhighlight>
A <code>foreach</code> statement can also be used:
<langsyntaxhighlight lang="powershell">foreach ($e in $h.GetEnumerator()) {
Write-Host Key: $e.Name, Value: $e.Value
}</langsyntaxhighlight>
Iterating over the keys:
<langsyntaxhighlight lang="powershell">$h.Keys | ForEach-Object { Write-Host Key: $_ }
 
foreach ($k in $h.Keys) {
Write-Host Key: $k
}</langsyntaxhighlight>
Iterating over the values:
<langsyntaxhighlight lang="powershell">$h.Values | ForEach-Object { Write-Host Value: $_ }
 
foreach ($v in $h.Values) {
Write-Host Value: $v
}</langsyntaxhighlight>
 
=={{header|Prolog}}==
Line 2,861 ⟶ 3,081:
from having more than one value):
 
<langsyntaxhighlight lang="prolog">
assert( mymap(key1,value1) ).
assert( mymap(key2,value1) ).
</syntaxhighlight>
</lang>
 
To perform the specific task at hand:
<langsyntaxhighlight lang="prolog">
?- forall( mymap(Key,Value), writeln( [Key,Value]) ).
 
[key1,value1]
[key2,value1]
</syntaxhighlight>
</lang>
 
In Prolog, however, iteration is "built-in". For example:
<langsyntaxhighlight lang="prolog">
?- mymap(key1, Y).
Y = value1.
Line 2,882 ⟶ 3,102:
X = key1 ;
X = key2.
</syntaxhighlight>
</lang>
 
To construct the list of keys:
<langsyntaxhighlight lang="prolog">
?- findall( X, mymap(X,value1), Xs).
Xs = [key1, key2].
</syntaxhighlight>
</lang>
 
To construct the list of distinct values:
<langsyntaxhighlight lang="prolog">
?- findall( Y, mymap(key1,Y), Ys).
Ys = [value1].
</syntaxhighlight>
</lang>
 
=={{header|PureBasic}}==
Hashes are a built-in type called Map in Purebasic.
 
<langsyntaxhighlight lang="purebasic">NewMap dict.s()
dict("de") = "German"
dict("en") = "English"
Line 2,906 ⟶ 3,126:
ForEach dict()
Debug MapKey(dict()) + ":" + dict()
Next</langsyntaxhighlight>
 
=={{header|Python}}==
<langsyntaxhighlight lang="python">myDict = { "hello": 13,
"world": 31,
"!" : 71 }
Line 2,926 ⟶ 3,146:
# iterating over values:
for value in myDict.values():
print ("value = %s" % value)</langsyntaxhighlight>
 
=={{header|QB64}}==
<syntaxhighlight lang="qb64">
<lang QB64>
'dictionary is not native data type of QB64
' here a dictionary engine using a string to store data
Line 3,050 ⟶ 3,270:
End Function
 
</syntaxhighlight>
</lang>
=={{header|R}}==
 
Line 3,057 ⟶ 3,277:
=== environment example ===
 
<langsyntaxhighlight lang="r">> env <- new.env()
> env[["x"]] <- 123
> env[["x"]]</langsyntaxhighlight>
<pre>[1] 123</pre>
<langsyntaxhighlight lang="r">> index <- "1"
> env[[index]] <- "rainfed hay"
> for (name in ls(env)) {
+ cat(sprintf('index=%s, value=%s\n', name, env[[name]]))
+ }</langsyntaxhighlight>
<pre>index=1, value=rainfed hay
index=x, value=123</pre>
Line 3,071 ⟶ 3,291:
=== vector example ===
 
<langsyntaxhighlight lang="r">> x <- c(hello=1, world=2, "!"=3)
> print(x["!"])</langsyntaxhighlight>
<pre>!
3</pre>
<langsyntaxhighlight lang="r">> print(unname(x["!"]))</langsyntaxhighlight>
<pre>[1] 3</pre>
 
=== list example ===
 
<langsyntaxhighlight Rlang="r">> a <- list(a=1, b=2, c=3.14, d="xyz")
> print(a$a)</langsyntaxhighlight>
<pre>[1] 1</pre>
<syntaxhighlight lang R="r">> print(a$d)</langsyntaxhighlight>
<pre>[1] "xyz"</pre>
 
Line 3,089 ⟶ 3,309:
Using the dictionary interface, different data structures can be treated as an associative array in Racket.
 
<langsyntaxhighlight lang="racket">
#lang racket
 
Line 3,100 ⟶ 3,320:
(for/list ([(k v) (in-dict dict3)]) ; => '("0 -> a" "1 -> b" "2 -> c")
(format "~a -> ~a" k v))
</syntaxhighlight>
</lang>
 
=={{header|Raku}}==
Line 3,106 ⟶ 3,326:
{{works with|Rakudo|2015.12}}
 
<syntaxhighlight lang="raku" perl6line>my %pairs = hello => 13, world => 31, '!' => 71;
for %pairs.kv -> $k, $v {
Line 3,121 ⟶ 3,341:
say "key = $_" for %pairs.keys;
 
say "value = $_" for %pairs.values;</langsyntaxhighlight>
 
=={{header|REXX}}==
<langsyntaxhighlight lang="rexx">/*REXX program demonstrates how to set and display values for an associative array. */
/*╔════════════════════════════════════════════════════════════════════════════════════╗
║ The (below) two REXX statements aren't really necessary, but it shows how to ║
Line 3,181 ⟶ 3,401:
stateN.code= name; w= max(w,length(name)) /*define the state's name; max width. */
stateC.code= cap /* " " " code to the capital*/
return /*return to invoker, SETSC is finished.*/</langsyntaxhighlight>
{{out|output|text=&nbsp; when using the internal default input:}}
<pre>
Line 3,214 ⟶ 3,434:
 
=={{header|Ring}}==
<langsyntaxhighlight lang="ring">
# Project : Associative array/Iteration
 
Line 3,221 ⟶ 3,441:
see lst[n][1] + " : " + lst[n][2] + nl
next
</syntaxhighlight>
</lang>
Output:
<pre>
Line 3,232 ⟶ 3,452:
Associative arrays are called ''lists'' in RLaB.
 
<syntaxhighlight lang="rlab">
<lang RLaB>
x = <<>>; // create an empty list
x.hello = 1;
Line 3,257 ⟶ 3,477:
 
 
</syntaxhighlight>
</lang>
 
=={{header|Ruby}}==
<langsyntaxhighlight lang="ruby">my_dict = { "hello" => 13,
"world" => 31,
"!" => 71 }
Line 3,273 ⟶ 3,493:
 
# iterating over values:
my_dict.each_value {|value| puts "value =#{value}"}</langsyntaxhighlight>
 
another way:
<langsyntaxhighlight lang="ruby">for key, value in my_dict
puts "key = #{key}, value = #{value}"
end
Line 3,286 ⟶ 3,506:
for value in my_dict.values
puts "value = #{value}"
end</langsyntaxhighlight>
 
{{out}}
Line 3,302 ⟶ 3,522:
 
=={{header|Rust}}==
<langsyntaxhighlight lang="rust">use std::collections::HashMap;
fn main() {
let mut olympic_medals = HashMap::new();
Line 3,314 ⟶ 3,534:
}
}</langsyntaxhighlight>
{{out}}
Note that <code>HashMap</code> does not preserve order (if this is important, <code>std::collections::BTreeMap</code> is what you want.)
Line 3,325 ⟶ 3,545:
 
=={{header|Scala}}==
<langsyntaxhighlight Scalalang="scala">val m = Map("Amsterdam" -> "Netherlands", "New York" -> "USA", "Heemstede" -> "Netherlands")
 
println(f"Key->Value: ${m.mkString(", ")}%s")
Line 3,331 ⟶ 3,551:
println(f"Keys: ${m.keys.mkString(", ")}%s")
println(f"Values: ${m.values.mkString(", ")}%s")
println(f"Unique values: ${m.values.toSet.mkString(", ")}%s")</langsyntaxhighlight>{{out}}<pre>
Key->Value: Amsterdam -> Netherlands, New York -> USA, Heemstede -> Netherlands
Pairs: (Amsterdam,Netherlands), (New York,USA), (Heemstede,Netherlands)
Line 3,343 ⟶ 3,563:
{{works with|Gauche Scheme}}
 
<syntaxhighlight lang="scheme">
<lang Scheme>
;; Create an associative array (hash-table) whose keys are strings:
(define table (hash-table 'string=?
Line 3,354 ⟶ 3,574:
;; Create by "partial application" a function that accepts 2 arguments,
;; the key and the value:
(pa$ format #t "Key = ~a, Value = ~a\n"))</langsyntaxhighlight>
 
Output:
Line 3,363 ⟶ 3,583:
</pre>
 
<syntaxhighlight lang="scheme">
<lang Scheme>
;; Iterate over the table and create a list of the keys and the
;; altered values:
Line 3,375 ⟶ 3,595:
(lambda (k-v) (cons (car k-v) (+ (cdr k-v) 5000)))
table)
</syntaxhighlight>
</lang>
 
To get a list of the keys or of the values of the table,
Line 3,396 ⟶ 3,616:
(To save space, I have removed comments you can read at the section for [[Associative_array/Creation#A_persistent_associative_array_from_scratch|''persistent'' associative arrays]].)
 
<langsyntaxhighlight lang="scheme">(cond-expand
(r7rs)
(chicken (import r7rs)))
Line 3,802 ⟶ 4,022:
 
))
(else))</langsyntaxhighlight>
{{out}}
<pre>$ csc -DDEMONSTRATION -R r7rs -X r7rs associative_array_with_generators.scm && ./associative_array_with_generators
Line 3,810 ⟶ 4,030:
 
=={{header|Seed7}}==
<langsyntaxhighlight lang="seed7">$ include "seed7_05.s7i";
 
const type: dictType is hash [string] integer;
Line 3,838 ⟶ 4,058:
writeln("value = " <& number);
end for;
end func;</langsyntaxhighlight>
 
{{out}}
Line 3,854 ⟶ 4,074:
 
=={{header|SenseTalk}}==
<langsyntaxhighlight lang="sensetalk">put {name:"Fluffy", type:"Rabbit", color:"White"} into animal
put "Carries a watch" into animal's habits
 
Line 3,885 ⟶ 4,105:
put animal's nextKeyValue
put animal's nextValue -- walking off the end returns a unique endValue
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 3,919 ⟶ 4,139:
 
=={{header|Sidef}}==
<langsyntaxhighlight lang="ruby">var hash = Hash.new(
key1 => 'value1',
key2 => 'value2',
Line 3,926 ⟶ 4,146:
# Iterate over key-value pairs
hash.each { |key, value|
say "#{key}: #{value}";
}
 
# Iterate only over keys
hash.keys.each { |key|
say key;
}
 
# Iterate only over values
hash.values.each { |value|
say value;
}</langsyntaxhighlight>
{{out}}
<pre>key1: value1
Line 3,949 ⟶ 4,169:
=={{header|Slate}}==
In Slate, all associative mappings inherit from <tt>Mapping</tt>, so they all have the same protocol. Even <tt>Sequence</tt>s obey it, in addition to their own protocol for collections with ordered integer-range keys.
<langsyntaxhighlight lang="slate">define: #pairs -> ({'hello' -> 1. 'world' -> 2. '!' -> 3. 'another!' -> 3} as: Dictionary).
pairs keysAndValuesDo: [| :key :value |
inform: '(k, v) = (' ; key printString ; ', ' ; value printString ; ')'
Line 3,960 ⟶ 4,180:
pairs do: [| :value |
inform: 'value = ' ; value printString
].</langsyntaxhighlight>
 
=={{header|Smalltalk}}==
{{works with|GNU Smalltalk}}
 
<langsyntaxhighlight lang="smalltalk">|pairs|
pairs := Dictionary
from: { 'hello' -> 1. 'world' -> 2. '!' -> 3. 'another!' -> 3 }.
Line 3,982 ⟶ 4,202:
pairs do: [ :value |
('value = %1' % { value }) displayNl
].</langsyntaxhighlight>
 
We could also obtain a set of keys or a collection of values and iterate over them with "<tt>do:</tt>":
 
<langsyntaxhighlight lang="smalltalk">(pairs keys) do: [ :k | "..." ].
(pairs values) do: [ :v | "..." ].</langsyntaxhighlight>
 
=={{header|SNOBOL4}}==
Line 3,995 ⟶ 4,215:
{{works with|CSnobol}}
 
<langsyntaxhighlight SNOBOL4lang="snobol4">* # Create sample table
t = table()
t<'cat'> = 'meow'
Line 4,010 ⟶ 4,230:
* # Iterate vals
vloop k = k + 1; output = a<k,2> :s(vloop)
end</langsyntaxhighlight>
 
=={{header|Stata}}==
<langsyntaxhighlight lang="stata">mata
// Create an associative array
a=asarray_create()
Line 4,025 ⟶ 4,245:
loc=asarray_next(a,loc)
} while(loc!=NULL)
end</langsyntaxhighlight>
 
=={{header|Swift}}==
<langsyntaxhighlight lang="swift">let myMap = [
"hello": 13,
"world": 31,
Line 4,035 ⟶ 4,255:
// iterating over key-value pairs:
for (key, value) in myMap {
println print("key = \(key), value = \(value)")
}
}</lang>
// Just the keys
for key in myMap.keys
{
print("key = \(key)")
}
// Just the values
for value in myMap.values
{
print("value = \(value)")
}</syntaxhighlight>
 
=={{header|Tcl}}==
===With Arrays===
<langsyntaxhighlight lang="tcl">array set myAry {
# list items here...
}
Line 4,055 ⟶ 4,285:
 
# There is nothing for directly iterating over just the values
# Use the keys+values version and ignore the keys</langsyntaxhighlight>
===With Dictionaries===
{{works with|Tcl|8.5}}
<langsyntaxhighlight lang="tcl">set myDict [dict create ...]; # Make the dictionary
 
# Iterate over keys and values
Line 4,073 ⟶ 4,303:
foreach value [dict values $myDict] {
puts "value = $value"
}</langsyntaxhighlight>
 
=={{header|TXR}}==
 
<langsyntaxhighlight lang="txrlisp">(defvarl h (hash))
 
(each ((k '(a b c))
Line 4,084 ⟶ 4,314:
 
(dohash (k v h)
(put-line `@k -> @v`))</langsyntaxhighlight>
 
{{out|Run}}
Line 4,094 ⟶ 4,324:
 
=={{header|UNIX Shell}}==
TwoAt least two shells have associative arrays, but they use different syntax to access their keys.
 
{{works with|ksh93}}
{{works with|bash|4.0 and above}}
<lang bash>typeset -A a=([key1]=value1 [key2]=value2)
<syntaxhighlight lang="bash">typeset -A a=([key1]=value1 [key2]=value2)
 
# just keys
Line 4,108 ⟶ 4,339:
for key in "${!a[@]}"; do
printf '%s => %s\n' "$key" "${a[$key]}"
done</langsyntaxhighlight>
 
{{works with|zsh}}
<langsyntaxhighlight lang="bash">typeset -A a
a=(key1 value1 key2 value2)
 
Line 4,121 ⟶ 4,352:
 
# keys and values
printf '%s => %s\n' ${(kv)a}</langsyntaxhighlight>
 
=={{header|Vala}}==
{{libheader|Gee}}
<langsyntaxhighlight lang="vala">
using Gee;
 
Line 4,155 ⟶ 4,386:
}
}
</syntaxhighlight>
</lang>
 
Compile with flag:
Line 4,178 ⟶ 4,409:
Dictionaries are similar in VBA and VBScript. Here is how to iterate.
 
<langsyntaxhighlight lang="vb">Option Explicit
Sub Test()
Dim h As Object, i As Long, u, v, s
Line 4,202 ⟶ 4,433:
Debug.Print u(i), v(i)
Next
End Sub</langsyntaxhighlight>
 
=={{header|VBScript}}==
<syntaxhighlight lang="vb">
<lang vb>
'instantiate the dictionary object
Set dict = CreateObject("Scripting.Dictionary")
Line 4,218 ⟶ 4,449:
WScript.StdOut.WriteLine key & " - " & dict.Item(key)
Next
</syntaxhighlight>
</lang>
 
{{Out}}
Line 4,228 ⟶ 4,459:
 
=={{header|Vim Script}}==
<langsyntaxhighlight lang="vim">let dict = {"apples": 11, "oranges": 25, "pears": 4}
 
echo "Iterating over key-value pairs"
Line 4,245 ⟶ 4,476:
for value in values(dict)
echo value
endfor</langsyntaxhighlight>
 
{{Out}}
Line 4,262 ⟶ 4,493:
4
11</pre>
 
=={{header|V (Vlang)}}==
<syntaxhighlight lang="v (vlang)">fn main() {
my_map := {
"hello": 13,
"world": 31,
"!" : 71 }
// iterating over key-value pairs:
for key, value in my_map {
println("key = $key, value = $value")
}
// iterating over keys:
for key,_ in my_map {
println("key = $key")
}
// iterating over values:
for _, value in my_map {
println("value = $value")
}
}</syntaxhighlight>
 
{{out}}
<pre>key = hello, value = 13
key = world, value = 31
key = !, value = 71
key = hello
key = world
key = !
value = 13
value = 31
value = 71
</pre>
 
=={{header|Wart}}==
<langsyntaxhighlight lang="wart">h <- (table 'a 1 'b 2)
each (key val) table
prn key " " val</langsyntaxhighlight>
 
{{out}}
Line 4,274 ⟶ 4,540:
=={{header|Wren}}==
Note that Wren makes no guarantee about iteration order which is not necessarily the same order in which the entries were added.
<langsyntaxhighlight ecmascriptlang="wren">// create a new map with four entries
var capitals = {
"France": "Paris",
Line 4,291 ⟶ 4,557:
 
// iterate though the map and print out just the values
for (v in capitals.values) System.print(v)</langsyntaxhighlight>
 
{{out}}
Line 4,312 ⟶ 4,578:
 
=={{header|XPL0}}==
<langsyntaxhighlight XPL0lang="xpl0">include c:\cxpl\stdlib;
char Dict(10,10);
int Entries;
Line 4,331 ⟶ 4,597:
for I:= 0 to Entries-1 do
[ChOut(0, Dict(I,0)); ChOut(0, ^ ); Text(0, @Dict(I,1)); CrLf(0)];
]</langsyntaxhighlight>
 
{{out}}
Line 4,342 ⟶ 4,608:
 
=={{header|zkl}}==
<langsyntaxhighlight lang="zkl">var d=Dictionary("A","alpha","D","delta", "B","beta", "C", "gamma");
d.keys.pump(Console.print,fcn(k){String(k,",")})
d.values.apply("toUpper").println();
d.makeReadOnly(); // can only iterate over k,v pairs if read only
foreach k,v in (d){print(k,":",v,"; ")}</langsyntaxhighlight>
{{out}}
<pre>
1,934

edits