Associative array/Creation: Difference between revisions

From Rosetta Code
Content added Content deleted
m (Creating Hash Structure moved to Creating an Associative Array: "Associative Array" is a more generic name.)
m (Added subsections to Perl. Added Array Operation template)
Line 1: Line 1:
{{task}}
{{task}}
{{Array operation}}


In this task, the goal is to create an [[associative array]].
In this task, the goal is to create an [[associative array]].
Line 6: Line 7:
'''Interpeter:''' Perl
'''Interpeter:''' Perl


Defining a Hash
===Defining a Hash===


# using => key does not need to be quoted unless it contains special chars
# using => key does not need to be quoted unless it contains special chars
Line 24: Line 25:
);
);


Defining a HashRef
===Defining a HashRef===


my $hashref = {
my $hashref = {
Line 33: Line 34:
}
}


Using a Hash
===Using a Hash===


print $hash{'key1'};
print $hash{'key1'};
Line 41: Line 42:
@hash{'key1', 'three'} = ('val1', -238.83);
@hash{'key1', 'three'} = ('val1', -238.83);


Using a HashRef
===Using a HashRef===


print $hash->{'key1'};
print $hash->{'key1'};
Line 92: Line 93:
for key, value in d.iteritems():
for key, value in d.iteritems():
print key, value
print key, value

Create a generic mapping function that applys a callback to elements in a list:

Revision as of 14:15, 23 January 2007

Task
Associative array/Creation
You are encouraged to solve this task according to the task description, using any language you may know.

Template:Array operation

In this task, the goal is to create an associative array.

Perl

Interpeter: Perl

Defining a Hash

# using => key does not need to be quoted unless it contains special chars
my %hash = (
  key1 => 'val1',
  'key-2' => 2,
  three => -238.83,
  4 => 'val3',
);

# using , both key and value need to be quoted if containing something non-numeric in nature
my %hash = (
  'key1', 'val1',
  'key-2', 2,
  'three', -238.83,
  4, 'val3',
);

Defining a HashRef

my $hashref = {
  key1 => 'val1',
  'key-2' => 2,
  three => -238.83,
  4 => 'val3',
}

Using a Hash

print $hash{'key1'};

$hash{'key1'} = 'val1';

@hash{'key1', 'three'} = ('val1', -238.83);

Using a HashRef

print $hash->{'key1'};

$hash->{'key1'} = 'val1';

@hash->{'key1', 'three'} = ('val1', -238.83);

Ruby

 #a hash object that returns nil for unknown keys
 hash={}
 hash[666]='devil'
 hash[777]  # => nil
 hash[666]  # => 'devil'
 #a hash object that returns 'unknown key' for unknown keys
 hash=Hash.new('unknown key')
 hash[666]='devil'
 hash[777]  # => 'unknown key'
 hash[666]  # => 'devil'
 #a hash object that returns "unknown key #{key}" for unknown keys
 hash=Hash.new{|h,k|h[k]="unknown key #{k}"}
 hash[666]='devil'
 hash[777]  # => 'unknown key 777'
 hash[666]  # => 'devil'

Python

In Python, hashes are called dictionaries.

 # empty dictionary
 d = {}
 d['spam'] = 1
 d['eggs'] = 2  
 # dictionaries with two keys
 d1 = {'spam': 1, 'eggs': 2}
 d2 = dict(spam=1, eggs=2)
 # dictionaries from tuple list
 d1 = dict([('spam', 1), ('eggs', 2)])
 d2 = dict(zip(['spam', 'eggs'], [1, 2]))
 # iterating over keys
 for key in d:
   print key, d[key]
 # iterating over (key, value) pairs
 for key, value in d.iteritems():
   print key, value

Create a generic mapping function that applys a callback to elements in a list: