Associative array/Merging: Difference between revisions

m
Moved Vlang entry into correct alphabetical order.
m (Moved Vlang entry into correct alphabetical order.)
 
(8 intermediate revisions by 6 users not shown)
Line 47:
{{trans|Python}}
 
<langsyntaxhighlight lang="11l">V base = [‘name’ = ‘Rocket Skates’, ‘price’ = ‘12.75’, ‘color’ = ‘yellow’]
V update = [‘price’ = ‘15.25’, ‘color’ = ‘red’, ‘year’ = ‘1974’]
 
Line 53:
result.update(update)
 
print(result)</langsyntaxhighlight>
 
{{out}}
Line 61:
 
=={{header|Ada}}==
<langsyntaxhighlight Adalang="ada">with Ada.Text_Io;
with Ada.Containers.Indefinite_Ordered_Maps;
 
Line 129:
New_Line;
 
end Merge_Maps;</langsyntaxhighlight>
{{out}}
<pre>Original:
Line 150:
{{works with|ALGOL 68G|Any - tested with release 2.8.3.win32}}
Uses the associative array implementations in [[ALGOL_68/prelude]].
<langsyntaxhighlight lang="algol68"># associative array merging #
# the modes allowed as associative array element values - change to suit #
Line 201:
);
e := NEXT c
OD</langsyntaxhighlight>
{{out}}
<pre>
Line 214:
The method with AppleScript "records" is to concatenate them. The result is a third record containing the labels from both contributors, the values from the record to the left of the operator being kept where labels are shared. The bars with some of the labels below are to distinguish them as "user" labels from tokenised ones that are provided as standards for use by scriptable applications and scripting additions. However, merging records works with tokenised labels too.
 
<langsyntaxhighlight lang="applescript">set baseRecord to {|name|:"Rocket Skates", price:12.75, |color|:"yellow"}
set updateRecord to {price:15.25, |color|:"red", |year|:1974}
 
set mergedRecord to updateRecord & baseRecord
return mergedRecord</langsyntaxhighlight>
 
{{output}}
<langsyntaxhighlight lang="applescript">{price:15.25, |color|:"red", |year|:1974, |name|:"Rocket Skates"}</langsyntaxhighlight>
 
=={{header|Arturo}}==
 
<langsyntaxhighlight lang="rebol">details: #[name: "Rocket Skates" price: 12.75 colour: 'yellow]
newDetails: extend details #[price: 15.25 colour: 'red year: 1974]
 
print newDetails</langsyntaxhighlight>
 
{{out}}
Line 235:
 
=={{header|AutoHotkey}}==
<langsyntaxhighlight AutoHotkeylang="autohotkey">merge(base, update){
Merged := {}
for k, v in base
Line 242:
Merged[k] := v
return Merged
}</langsyntaxhighlight>
Examples:<langsyntaxhighlight AutoHotkeylang="autohotkey">base := {"name":"Rocket Skates", "price":12.75, "color":"yellow"}
update := {"price":15.25, "color":"red", "year":1974}
Merged := merge(base, update)
for k, v in Merged
result .= k " : " v "`n"
MsgBox % result</langsyntaxhighlight>
Outputs:<pre>color : red
name : Rocket Skates
Line 255:
 
=={{header|AWK}}==
<syntaxhighlight lang="awk">
<lang AWK>
# syntax: GAWK -f ASSOCIATIVE_ARRAY_MERGING.AWK
#
Line 283:
}
}
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 304:
 
=={{header|B4X}}==
<langsyntaxhighlight lang="b4x">Dim m1 As Map = CreateMap("name": "Rocket Skates", "price": 12.75, "color": "yellow")
Dim m2 As Map = CreateMap("price": 15.25, "color": "red", "year": 1974)
Dim merged As Map
Line 313:
Next
Next
Log(merged)</langsyntaxhighlight>
 
=={{header|BaConBASIC}}==
==={{header|BaCon}}===
<lang bacon>DECLARE base$, update$, merge$ ASSOC STRING
<syntaxhighlight lang="bacon">DECLARE base$, update$, merge$ ASSOC STRING
 
base$("name") = "Rocket Skates"
Line 342 ⟶ 343:
FOR x$ IN OBTAIN$(merge$)
PRINT x$, " : ", merge$(x$)
NEXT</langsyntaxhighlight>
{{out}}
<pre>Base array
Line 361 ⟶ 362:
 
=={{header|C++}}==
<langsyntaxhighlight lang="cpp">#include <iostream>
#include <string>
#include <map>
Line 388 ⟶ 389:
std::cout << "key: " << i.first << ", value: " << i.second << '\n';
return 0;
}</langsyntaxhighlight>
 
{{out}}
Line 399 ⟶ 400:
 
=={{header|C sharp|C#}}==
<langsyntaxhighlight lang="csharp">using System;
using System.Collections.Generic;
using System.Linq;
Line 424 ⟶ 425:
}
}
}</langsyntaxhighlight>
{{out}}
<pre>
Line 433 ⟶ 434:
 
=={{header|Clojure}}==
<syntaxhighlight lang="clojure">
<lang Clojure>
(defn update-map [base update]
(merge base update))
Line 443 ⟶ 444:
"color" "red"
"year" "1974"})
</syntaxhighlight>
</lang>
 
{{out}}
Line 451 ⟶ 452:
 
=={{header|Crystal}}==
<langsyntaxhighlight lang="crystal">base = {"name" => "Rocket Skates", "price" => 12.75, "color" => "yellow"}
update = { "price" => 15.25, "color" => "red", "year" => 1974 }
 
puts base.merge(update)</langsyntaxhighlight>
 
{{out}}
Line 462 ⟶ 463:
=={{header|Common Lisp}}==
In Common Lisp, the value of a key in an alist or a plist is defined as the first value in the list with a matching key or indicator. Thus, all that is necessary to implement this algorithm for either is the following:
<langsyntaxhighlight lang="lisp">
(append list2 list1)
</syntaxhighlight>
</lang>
 
These implementations for alists and plists are more complicated, but avoid duplicate keys in the results:
<langsyntaxhighlight lang="lisp">
(defun merge-alists (alist1 alist2)
(nconc
Line 483 ⟶ 484:
:do (setf (getf res key) val))
res))
</syntaxhighlight>
</lang>
 
=={{header|Dart}}==
<langsyntaxhighlight lang="javascript">
main() {
var base = {
Line 508 ⟶ 509:
 
}
</syntaxhighlight>
</lang>
=={{header|Delphi}}==
{{libheader| System.Generics.Collections}}
{{Trans|C#}}
<syntaxhighlight lang="delphi">
<lang Delphi>
program Associative_arrayMerging;
 
Line 555 ⟶ 556:
end.
 
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 565 ⟶ 566:
=={{header|Elixir}}==
Elixir has a built-in hashmap type, called [https://hexdocs.pm/elixir/Map.html Map].
<langsyntaxhighlight Elixirlang="elixir">base = %{name: "Rocket Skates", price: 12.75, color: "yellow"}
update = %{price: 15.25, color: "red", year: 1974}
result = Map.merge(base, update)
IO.inspect(result)</langsyntaxhighlight>
{{out}}
<pre>%{color: "red", name: "Rocket Skates", price: 15.25, year: 1974}</pre>
The above sample uses [https://hexdocs.pm/elixir/Atom.html atoms] as the key type. If strings are needed, the <code>base</code> map would look like this:
<langsyntaxhighlight Elixirlang="elixir">base = %{"name" => "Rocket Skates", "price" => 12.75, "color" => "yellow"}</langsyntaxhighlight>
 
=={{header|F_Sharp|F#}}==
<langsyntaxhighlight lang="fsharp">
type N = |Price of float|Name of string|Year of int|Colour of string
let n=Map<string,N>[("name",Name("Rocket Skates"));("price",Price(12.75));("colour",Colour("yellow"))]
Line 581 ⟶ 582:
let ng=(Map.toList n)@(Map.toList g)|>Map.ofList
printfn "%A" ng
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 593 ⟶ 594:
The <code>assoc-union</code> word does this. <code>assoc-union!</code> is a variant that mutates the first associative array.
{{works with|Factor|0.99 2019-10-06}}
<langsyntaxhighlight lang="factor">USING: assocs prettyprint ;
 
{ { "name" "Rocket Skates" } { "price" 12.75 } { "color" "yellow" } }
{ { "price" 15.25 } { "color" "red" } { "year" 1974 } }
assoc-union .</langsyntaxhighlight>
{{out}}
<pre>
Line 607 ⟶ 608:
}
</pre>
 
=={{header|FutureBasic}}==
<syntaxhighlight lang="futurebasic">
void local fn DoIt
CFDictionaryRef base = @{@"name" :@"Rocket Skates", @"price":@12.75, @"color":@"yellow"}
CFDictionaryRef update = @{@"price":@15.25, @"color":@"red", @"year":@1974}
CFMutableDictionaryRef merged = fn MutableDictionaryWithDictionary( base )
MutableDictionaryAddEntriesFromDictionary( merged, update )
print merged
end fn
 
fn DoIt
 
HandleEvents
</syntaxhighlight>
 
 
=={{header|Go}}==
<langsyntaxhighlight lang="go">package main
 
import "fmt"
Line 631 ⟶ 650:
result := merge(base, update)
fmt.Println(result)
}</langsyntaxhighlight>
 
{{out}}
Line 641 ⟶ 660:
There are various approaches, all of which would be strictly typed.<br>
For example, if we want to treat the input and output records as all sharing the same type:
<langsyntaxhighlight lang="haskell">data Item = Item
{ name :: Maybe String
, price :: Maybe Float
Line 657 ⟶ 676:
itemFromMerge
(Item (Just "Rocket Skates") (Just 12.75) (Just "yellow") Nothing)
(Item Nothing (Just 15.25) (Just "red") (Just 1974))</langsyntaxhighlight>
{{Out}}
<pre>Item {name = Just "Rocket Skates", price = Just 15.25, color = Just "red", year = Just 1974}</pre>
 
=={{header|Icon}} and {{header|Unicon}}==
<langsyntaxhighlight lang="unicon">procedure main()
local base, update, master, f, k
 
Line 683 ⟶ 702:
write(k, " = ", master[k])
}
end</langsyntaxhighlight>
 
{{out}}
Line 693 ⟶ 712:
 
=={{header|J}}==
<syntaxhighlight lang="j">
<lang J>
merge=: ,. NB. use: update merge original
compress=: #"1~ ~:@:keys
Line 700 ⟶ 719:
get=: [: > ((i.~ keys)~ <)~ { values@:] NB. key get (associative array)
pair=: [: |: <;._2;._2
</syntaxhighlight>
</lang>
Exercise the definitions. Interactive J prompts with 3 space indentation.
<pre>
Line 752 ⟶ 771:
 
=={{header|Java}}==
<p>
<lang java>import java.util.*;
See also, [https://rosettacode.org/wiki/Associative_array/Creation#Java Java - Associative array/Creation].
</p>
<p>
This task illustrates the difference between statically typed languages, and dynamically typed.<br />
With exception to the <code>var</code> keyword, Java is statically typed.
So, using an undefined, non-static, <kbd>value</kbd>, creates a trivial situation.
</p>
<p>
A good way to understand this task is that it's not possible in a static-typed language.<br />
It defeats the purpose of defining the data-type.<br />
For Java, if you're going to use <code>Object</code> as your data-type, you need to re-evaluate the method of abstraction.
</p>
<p>
Java offers <kbd>generics</kbd>, <kbd>interfaces</kbd>, and <kbd>abstract classes</kbd> for this task.
</p>
<p>
Considering this, to complete this specific task, I would just store the values as <kbd>strings</kbd>.
</p>
<syntaxhighlight lang="java">
import java.util.LinkedHashMap;
import java.util.Map;
</syntaxhighlight>
<syntaxhighlight lang="java">
Map<String, String> mapA = new LinkedHashMap<>();
mapA.put("name", "Rocket Skates");
mapA.put("price", "12.75");
mapA.put("color", "yellow");
 
Map<String, String> mapB = new LinkedHashMap<>();
class MergeMaps {
mapB.put("price", "15.25");
public static void main(String[] args) {
mapB.put("color", "red");
Map<String, Object> base = new HashMap<>();
basemapB.put("nameyear", "Rocket Skates1974");
base.put("price", 12.75);
base.put("color", "yellow");
Map<String, Object> update = new HashMap<>();
update.put("price", 15.25);
update.put("color", "red");
update.put("year", 1974);
 
Map<String, ObjectString> resultmapC = new HashMapLinkedHashMap<>(base);
resultmapC.putAll(updatemapA);
mapC.putAll(mapB);
</syntaxhighlight>
To show that the original <kbd>map</kbd>s are not affected.
<syntaxhighlight lang="java">
for(Map.Entry<String, String> entry : mapA.entrySet())
System.out.printf("%-20s%s%n", entry.getKey(), entry.getValue());
 
for(Map.Entry<String, String> entry : mapB.entrySet())
System.out.println(result);
System.out.printf("%-20s%s%n", entry.getKey(), entry.getValue());
}
 
}</lang>
for(Map.Entry<String, String> entry : mapC.entrySet())
{{output}}
System.out.printf("%-20s%s%n", entry.getKey(), entry.getValue());
<pre>{name=Rocket Skates, color=red, year=1974, price=15.25}</pre>
</syntaxhighlight>
<pre>
name Rocket Skates
price 12.75
color yellow
</pre>
<pre>
price 15.25
color red
year 1974
</pre>
<pre>
name Rocket Skates
price 15.25
color red
year 1974
</pre>
<p>
While not recommended, due to scalability, if you did want to use an <code>Object</code> as the value, you could use the following implementation.<br />
This will produce the same output as above.
</p>
<syntaxhighlight lang="java">
Map<String, Object> mapA = new LinkedHashMap<>();
mapA.put("name", "Rocket Skates");
mapA.put("price", 12.75);
mapA.put("color", "yellow");
 
Map<String, Object> mapB = new LinkedHashMap<>();
mapB.put("price", 15.25);
mapB.put("color", "red");
mapB.put("year", 1974);
 
Map<String, Object> mapC = new LinkedHashMap<>();
mapC.putAll(mapA);
mapC.putAll(mapB);
</syntaxhighlight>
 
=={{header|JavaScript}}==
<langsyntaxhighlight lang="javascript">(() => {
'use strict';
 
Line 792 ⟶ 874:
null, 2
))
})();</langsyntaxhighlight>
{{Out}}
<pre>{
Line 845 ⟶ 927:
 
=={{header|Kotlin}}==
<langsyntaxhighlight lang="scala">
fun main() {
val base = HashMap<String,String>()
Line 865 ⟶ 947:
println("merged: $merged")
}
</syntaxhighlight>
</lang>
{{Output}}
<pre>
Line 874 ⟶ 956:
 
=={{header|Lua}}==
<langsyntaxhighlight Lualang="lua">base = {name="Rocket Skates", price=12.75, color="yellow"}
update = {price=15.25, color="red", year=1974}
 
Line 891 ⟶ 973:
for key,val in pairs(result) do
print(string.format("%s: %s", key, val))
end</langsyntaxhighlight>
 
{{output}}
Line 900 ⟶ 982:
 
=={{header|Mathematica}} / {{header|Wolfram Language}}==
<langsyntaxhighlight Mathematicalang="mathematica">a1 = <|"name" -> "Rocket Skates", "price" -> 12.75, "color" -> "yellow"|>;
a2 = <|"price" -> 15.25, "color" -> "red", "year" -> 1974|>;
Merge[{a1, a2}, Last]</langsyntaxhighlight>
{{out}}
<pre><|"name" -> "Rocket Skates", "price" -> 15.25, "color" -> "red", "year" -> 1974|></pre>
Line 908 ⟶ 990:
=={{header|MiniScript}}==
MiniScript supports merging maps with the + operator.
<langsyntaxhighlight MiniScriptlang="miniscript">base = {"name":"Rocket Skates", "price":12.75, "color":"yellow"}
update = {"price":15.25, "color":"red", "year":1974}
 
result = base + update
 
print result</langsyntaxhighlight>
 
{{output}}
Line 919 ⟶ 1,001:
 
=={{header|Nim}}==
<langsyntaxhighlight Nimlang="nim">import tables
 
let t1 = {"name": "Rocket Skates", "price": "12.75", "color": "yellow"}.toTable
Line 928 ⟶ 1,010:
t3[key] = value
 
echo t3</langsyntaxhighlight>
 
{{out}}
Line 935 ⟶ 1,017:
=={{header|Objective-C}}==
{{works with|Cocoa}}
<langsyntaxhighlight lang="objc">#import <Foundation/Foundation.h>
 
int main(void) {
Line 948 ⟶ 1,030:
}
return 0;
}</langsyntaxhighlight>
{{output}}
<pre>{
Line 964 ⟶ 1,046:
 
Helper code for all 3 versions:
<syntaxhighlight lang="ocaml">
<lang OCaml>
type ty =
| TFloat of float
Line 981 ⟶ 1,063:
Printf.printf "%s: %s\n" key (string_of_ty el)
;;
</syntaxhighlight>
</lang>
 
Association list : naive and functional approach.
<syntaxhighlight lang="ocaml">
<lang OCaml>
let l1 : assoc list = [
("name", TString "Rocket Skates");
Line 1,007 ⟶ 1,089:
 
let l' = merge_assoc_list l1 l2 ;;
</syntaxhighlight>
</lang>
 
Binary tree/Map functor : proper functional approach.
{{works with|OCaml|above 4.03 for union function}}
<syntaxhighlight lang="ocaml">
<lang OCaml>
module StringMap = Map.Make(String) ;;
 
Line 1,037 ⟶ 1,119:
 
print_map m' ;;
</syntaxhighlight>
</lang>
 
Hash table : imperative/mutable approach.
<syntaxhighlight lang="ocaml">
<lang OCaml>
(* Updates the base table with the bindings from add *)
let hash_merge (base : (string, ty) Hashtbl.t) (add : (string, ty) Hashtbl.t) : unit =
Line 1,061 ⟶ 1,143:
 
print_hashtbl h1 ;;
</syntaxhighlight>
</lang>
 
=={{header|Ol}}==
Since version 3.1.1 function `ff-union` changed from `(ff-union a1 a2 collide)` to `(ff-union collide a1 a2 ...)`!
 
<langsyntaxhighlight lang="scheme">
(define a1 {
'name "Rocket Skates"
Line 1,084 ⟶ 1,166:
(define (collide a b) b) ; will use new key value
(print "merged a1 a2: " (ff-union collide a1 a2))
</syntaxhighlight>
</lang>
{{Out}}
<pre>
Line 1,093 ⟶ 1,175:
 
=={{header|Perl}}==
<langsyntaxhighlight lang="perl">use strict;
use warnings;
 
Line 1,107 ⟶ 1,189:
$merge{$_} = [$base{$_}] for keys %base;
push @{$merge{$_}}, $more{$_} for keys %more;
printf "%-7s %s\n", $_, join ', ', @{$merge{$_}} for sort keys %merge;</langsyntaxhighlight>
{{output}}
<pre>Update
Line 1,122 ⟶ 1,204:
 
=={{header|Phix}}==
<!--<langsyntaxhighlight Phixlang="phix">(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">d1</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">new_dict</span><span style="color: #0000FF;">({{</span><span style="color: #008000;">"name"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Rocket Skates"</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"price"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">12.75</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"color"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"yellow"</span><span style="color: #0000FF;">}}),</span>
Line 1,131 ⟶ 1,213:
<span style="color: #008080;">include</span> <span style="color: #000000;">builtins</span><span style="color: #0000FF;">/</span><span style="color: #000000;">map</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span>
<span style="color: #0000FF;">?</span><span style="color: #000000;">pairs</span><span style="color: #0000FF;">(</span><span style="color: #000000;">d3</span><span style="color: #0000FF;">)</span>
<!--</langsyntaxhighlight>-->
{{out}}
<pre>
Line 1,138 ⟶ 1,220:
 
=={{header|Phixmonti}}==
<langsyntaxhighlight Phixmontilang="phixmonti">include ..\Utilitys.pmt
 
def scand /# dict key -- dict n #/
Line 1,184 ⟶ 1,266:
 
pstack
</syntaxhighlight>
</lang>
 
=={{header|PHP}}==
<langsyntaxhighlight lang="php"><?
$base = array("name" => "Rocket Skates", "price" => 12.75, "color" => "yellow");
$update = array("price" => 15.25, "color" => "red", "year" => 1974);
Line 1,193 ⟶ 1,275:
$result = $update + $base; // Notice that the order is reversed
print_r($result);
?></langsyntaxhighlight>
{{output}}
<pre>Array
Line 1,204 ⟶ 1,286:
 
Alternative:
<langsyntaxhighlight lang="php"><?
$base = array("name" => "Rocket Skates", "price" => 12.75, "color" => "yellow");
$update = array("price" => 15.25, "color" => "red", "year" => 1974);
Line 1,210 ⟶ 1,292:
$result = array_merge($base, $update);
print_r($result);
?></langsyntaxhighlight>
{{output}}
<pre>Array
Line 1,221 ⟶ 1,303:
 
=={{header|PureBasic}}==
<langsyntaxhighlight PureBasiclang="purebasic">NewMap m1.s()
NewMap m2.s()
NewMap m3.s()
Line 1,241 ⟶ 1,323:
ForEach m3()
Debug MapKey(m3())+" : "+m3()
Next</langsyntaxhighlight>
{{out}}
<pre>price : 15.25
Line 1,251 ⟶ 1,333:
As of Python 3.5, this can be solved with the dictionary unpacking operator.
{{works with|Python|3.5+}}
<langsyntaxhighlight Pythonlang="python">base = {"name":"Rocket Skates", "price":12.75, "color":"yellow"}
update = {"price":15.25, "color":"red", "year":1974}
 
result = {**base, **update}
 
print(result)</langsyntaxhighlight>
{{output}}
<pre>{'name': 'Rocket Skates', 'price': 15.25, 'color': 'red', 'year': 1974}</pre>
 
;Alternative:
<langsyntaxhighlight Pythonlang="python">base = {"name":"Rocket Skates", "price":12.75, "color":"yellow"}
update = {"price":15.25, "color":"red", "year":1974}
 
Line 1,267 ⟶ 1,349:
result.update(update)
 
print(result)</langsyntaxhighlight>
{{output}}
<pre>{'name': 'Rocket Skates', 'price': 15.25, 'color': 'red', 'year': 1974}</pre>
Line 1,273 ⟶ 1,355:
;New alternative using '|'
 
<langsyntaxhighlight lang="python">Python 3.9.0 (tags/v3.9.0:9cf6752, Oct 5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> base = {"name":"Rocket Skates", "price":12.75, "color":"yellow"}
Line 1,280 ⟶ 1,362:
>>> result
{'name': 'Rocket Skates', 'price': 15.25, 'color': 'red', 'year': 1974}
>>> </langsyntaxhighlight>
 
=={{header|Racket}}==
 
<langsyntaxhighlight lang="racket">#lang racket/base
 
(require racket/hash)
Line 1,300 ⟶ 1,382:
 
(hash-union base-data update-data #:combine (λ (a b) b)))
</syntaxhighlight>
</lang>
 
{{out}}
Line 1,310 ⟶ 1,392:
I must say I somewhat disagree with the terminology. The requested operation is an update not a merge. Demonstrate both an update and a merge. Associative arrays are commonly called hashes in Raku.
 
<syntaxhighlight lang="raku" perl6line># Show original hashes
say my %base = :name('Rocket Skates'), :price<12.75>, :color<yellow>;
say my %update = :price<15.25>, :color<red>, :year<1974>;
Line 1,325 ⟶ 1,407:
 
# Demonstrate unmutated hashes
say "\n", %base, "\n", %update;</langsyntaxhighlight>
{{out}}
<pre>{color => yellow, name => Rocket Skates, price => 12.75}
Line 1,365 ⟶ 1,447:
The double quotes that surround the string (character) items (as shown in the task's preamble) weren't included for this presentation,
<br>although they could easily be added.
<langsyntaxhighlight lang="rexx">/*REXX program merges two associative arrays (requiring an external list of indices). */
$.= /*define default value(s) for arrays. */
@.wAAn= 21; @.wKey= 7; @.wVal= 7 /*max widths of: AAname, keys, values.*/
Line 1,397 ⟶ 1,479:
say center(AAn, @.wAAn) right(key, @.wKey) $.AAn.key /*show some information.*/
end /*j*/
return</langsyntaxhighlight>
{{out|output|text=&nbsp; when using the internal default inputs:}}
<pre>
Line 1,418 ⟶ 1,500:
 
=={{header|Ring}}==
<langsyntaxhighlight lang="ring">
load "stdlib.ring"
 
Line 1,442 ⟶ 1,524:
see list1[n][1] + " = " + list1[n][2] + nl
next
</syntaxhighlight>
</lang>
Output:
<pre>
Line 1,452 ⟶ 1,534:
 
=={{header|Ruby}}==
<langsyntaxhighlight lang="ruby">base = {"name" => "Rocket Skates", "price" => 12.75, "color" => "yellow"}
update = {"price" => 15.25, "color" => "red", "year" => 1974}
 
result = base.merge(update)
p result</langsyntaxhighlight>
{{output}}
<pre>{"name"=>"Rocket Skates", "price"=>15.25, "color"=>"red", "year"=>1974}</pre>
 
=={{header|Rust}}==
<langsyntaxhighlight lang="rust">use std::collections::HashMap;
 
fn main() {
Line 1,478 ⟶ 1,560:
println!("{:#?}", original);
}
</syntaxhighlight>
</lang>
{{output}}
<pre>{
Line 1,493 ⟶ 1,575:
in an alist. Hence, a merge may be implemented by simply appending the update alist to the
front of the base alist. The downside is this leaves a bunch of useless junk in the alist.
<langsyntaxhighlight lang="scheme">; Merge alists by appending the update list onto the front of the base list.
; (The extra '() is so that append doesn't co-opt the second list.)
(define append-alists
Line 1,512 ⟶ 1,594:
(unless (null? keys)
(printf "~s -> ~s~%" (car keys) (cdr (assoc (car keys) merged)))
(loop (cdr keys))))))</langsyntaxhighlight>
{{out}}
<pre>
Line 1,528 ⟶ 1,610:
This is more true to the intent of the Task. It generates a new alist with only the key/value
pairs needed.
<langsyntaxhighlight lang="scheme">; Merge the given alists. Prefer the items from the "update" alist.
; Returns a new list; the argument lists are not modified.
(define merge-alists
Line 1,554 ⟶ 1,636:
(unless (null? keys)
(printf "~s -> ~s~%" (car keys) (cdr (assoc (car keys) merged)))
(loop (cdr keys))))))</langsyntaxhighlight>
{{out}}
<pre>
Line 1,569 ⟶ 1,651:
=={{header|SenseTalk}}==
In addition to setting individual property values, SenseTalk includes 5 built-in operations for modifying property lists, to: add properties, replace properties, remove properties, retain properties, and rename properties. The operation to replace properties is needed for this task.
<langsyntaxhighlight lang="sensetalk">set base to {name:"Rocket Skates", price:12.75, color:"yellow"}
 
set update to {price:15.25, color:"red", year:1974}
Line 1,582 ⟶ 1,664:
replace properties of update in base
put "Base after update: " & base
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,592 ⟶ 1,674:
 
=={{header|Smalltalk}}==
<langsyntaxhighlight lang="smalltalk">base := Dictionary withAssociations:{
'name'-> 'Rocket Skates' .
'price' -> 12.75 .
Line 1,606 ⟶ 1,688:
declareAllFrom:update.
 
Transcript showCR: result.</langsyntaxhighlight>
{{out}}
<pre>Dictionary(name->Rocket Skates price->15.25 year->1974 color->red)</pre>
Line 1,612 ⟶ 1,694:
=={{header|Swift}}==
{{works with|Swift|5+}}
<langsyntaxhighlight lang="swift">let base : [String: Any] = ["name": "Rocket Skates", "price": 12.75, "color": "yellow"]
let update : [String: Any] = ["price": 15.25, "color": "red", "year": 1974]
 
let result = base.merging(update) { (_, new) in new }
 
print(result)</langsyntaxhighlight>
{{output}}
<pre>["price": 15.25, "name": "Rocket Skates", "color": "red", "year": 1974]</pre>
 
=={{header|Tcl}}==
<langsyntaxhighlight lang="tcl">set dict1 [dict create name "Rocket Skates" price 12.75 color yellow]
set dict2 [dict create price 15.25 color red year 1974]
dict for {key val} [dict merge $dict1 $dict2] {
puts "$key: $val"
}</langsyntaxhighlight>
{{output}}
<pre>name: Rocket Skates
Line 1,636 ⟶ 1,718:
3 ways to do this tasks :
First : With Arrays + Type
<syntaxhighlight lang="vb">
<lang vb>
Private Type Associative
Key As String
Line 1,692 ⟶ 1,774:
Next i
Debug.Print "-----------------------------"
End Sub</langsyntaxhighlight>
 
Second way (simply) : with the Scripting Dictionary Object :
<langsyntaxhighlight lang="vb">Sub Main_With_Dictionary()
Dim Base As Object, Update As Object, Merged As Object, K As Variant
'INIT VARIABLE
Line 1,717 ⟶ 1,799:
Debug.Print K, Merged(K)
Next K
End Sub</langsyntaxhighlight>
 
And the Third : With a Class Module (named ClassArrayAssociative)
The Class Module code:
<langsyntaxhighlight lang="vb">Option Explicit
 
Private mKey As String
Line 1,742 ⟶ 1,824:
Value = V
Key = K
End Sub</langsyntaxhighlight>
The Module code :
<langsyntaxhighlight lang="vb">Sub Main_With_Class()
Dim Base(2) As New ClassArrayAssociative, Up(2) As New ClassArrayAssociative
ReDim Result(UBound(Base)) As New ClassArrayAssociative
Line 1,786 ⟶ 1,868:
Next i
Debug.Print "-----------------------------"
End Sub</langsyntaxhighlight>
{{out}}
<pre>
Line 1,797 ⟶ 1,879:
 
=={{header|VBScript}}==
<syntaxhighlight lang="vb">
<lang vb>
set d1=createobject("Scripting.Dictionary")
d1.add "name", "Rocket Skates"
Line 1,827 ⟶ 1,909:
wscript.echo k3 & vbtab & d3(k3)
next
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,836 ⟶ 1,918:
</pre>
 
=={{header|WrenV (Vlang)}}==
<syntaxhighlight lang="v (vlang)">type Generic = int|string|f64
<lang ecmascript>var mergeMaps = Fn.new { |m1, m2|
var m3 = {}
for (key in m1.keys) m3[key] = m1[key]
for (key in m2.keys) m3[key] = m2[key]
return m3
}
 
var base = { "name": "Rocket Skates" , "price": 12.75, "color": "yellow" }
var update = { "price": 15.25, "color": "red", "year": 1974 }
var merged = mergeMaps.call(base, update)
System.print(merged)</lang>
 
{{out}}
<pre>
{name: Rocket Skates, color: red, price: 15.25, year: 1974}
</pre>
 
=={{header|Vlang}}==
<lang vlang>type Generic = int|string|f64
type Assoc = map[string]Generic
 
Line 1,876 ⟶ 1,940:
println('$k: $v')
}
}</langsyntaxhighlight>
{{out}}
<pre>
Line 1,886 ⟶ 1,950:
 
=={{header|Wren}}==
<langsyntaxhighlight ecmascriptlang="wren">var mergeMaps = Fn.new { |m1, m2|
var m3 = {}
for (key in m1.keys) m3[key] = m1[key]
Line 1,896 ⟶ 1,960:
var update = { "price": 15.25, "color": "red", "year": 1974 }
var merged = mergeMaps.call(base, update)
System.print(merged)</langsyntaxhighlight>
 
{{out}}
Line 1,904 ⟶ 1,968:
 
=={{header|zkl}}==
<langsyntaxhighlight lang="zkl">base:=Dictionary(
"name", "Rocket Skates",
"price", 12.75,
Line 1,915 ⟶ 1,979:
update.pump( new:=base.copy() );
 
new.pump(Void,fcn([(k,v)]){ println("%s\t%s".fmt(k,v)) });</langsyntaxhighlight>
{{out}}
<pre>
9,476

edits