Реализация: Iterable<Entry<K,V>>, Map<K,V>
Реализация хеш-таблицы интерфейса Map .
Реализует связи 1 к 1 по ключу типа К к элементам типа V. Отображение делается по хэшу для каждого ключа, что может быть настроено через передачу указателей на функции хэширования и проверку равенства ключей.
Вы можете передать собственную функцию хэширования и проверки равентсва конструктору, например:
var map = new Gee.HashMap<Foo, Object>(foo_hash, foo_equal);
Для строк и целых чисел хэш и функции проверки равенства подставляются автоматически, объекты различаются по их ссылкам по умолчанию. Вы должны передавать пользовательские функции хэширования и проверки равенства если хотите изменить стандартное поведение.
Эта реализация лучше подходит для сильно разнородных ключевых значений. В случае избыточности хеш-ключей или большого объема данных предпочтение отдается использованию дерева, например TreeMap .
Maps work like a dictionary. They store key - value pairs.
using Gee;
void main () {
var map = new HashMap<string, int> ();
// Setting values
map.set ("one", 1);
map.set ("two", 2);
map.set ("three", 3);
map["four"] = 4; // same as map.set ("four", 4)
map["five"] = 5;
// Getting values
int a = map.get ("four");
int b = map["four"]; // same as map.get ("four")
assert (a == b);
// Iteration
stdout.printf ("Итерация по значениям\n");
foreach (var entry in map.entries) {
stdout.printf ("%s => %d\n", entry.key, entry.value);
}
stdout.printf ("Итерация только по ключам\n");
foreach (string key in map.keys) {
stdout.printf ("%s\n", key);
}
stdout.printf ("Итерация только по значениям\n");
foreach (int value in map.values) {
stdout.printf ("%d\n", value);
}
stdout.printf ("Итерация с помощью for\n");
var it = map.map_iterator ();
for (var has_next = it.next (); has_next; has_next = it.next ()) {
stdout.printf ("%d\n", it.get_value ());
}
}
$ valac --pkg gee-0.8 gee-map.vala
$ ./gee-map
- public override Set<Entry<K,V>> entries { owned get; } The read-only view of the entries of this map.
- public EqualDataFunc<K> key_equal_func { get; } The keys' equality testing function.
- public HashDataFunc<K> key_hash_func { get; } The keys' hash function.
- public override Set<K> keys { owned get; } The read-only view of the keys of this map.
- public override bool read_only { get; } Specifies whether this collection can change - i.e. wheather set, remove etc. are legal operations.
- public override int size { get; } The number of items in this map.
- public EqualDataFunc<V> value_equal_func { get; } The values' equality testing function.
- public override Collection<V> values { owned get; } The read-only view of the values of this map.
- public HashMap (owned HashDataFunc<K>? key_hash_func = null, owned EqualDataFunc<K>? key_equal_func = null, owned EqualDataFunc<V>? value_equal_func = null) Constructs a new, empty hash map.
- public override V @get (K key) Returns the value of the specified key in this map.
- public override void @set (K key, V value) Inserts a new key and value into this map.
- public override void clear () Removes all items from this collection. Must not be called on read-only collections.
- public override bool has (K key, V value) Determines whether this map has the specified key/value entry.
- public override bool has_key (K key) Determines whether this map has the specified key.
- public override MapIterator<K,V> map_iterator () Returns an iterator for this map.
- public override bool unset (K key, out V value = null) Removes the specified key from this map.
Полный список коллекций см здесь.