Struct UnsafeParallelMultiHashMap<TKey, TValue>
An unordered, expandable associative array. Each key can have more than one associated value.
Implements
Namespace: Unity.Collections.LowLevel.Unsafe
Assembly: Unity.Collections.dll
Syntax
public struct UnsafeParallelMultiHashMap<TKey, TValue> : INativeDisposable where TKey : unmanaged, IEquatable<TKey> where TValue : unmanaged
Type Parameters
Name | Description |
---|---|
TKey | The type of the keys. |
TValue | The type of the values. |
Remarks
Unlike a regular UnsafeParallelHashMap, an UnsafeParallelMultiHashMap can store multiple key-value pairs with the same key.
The keys are not deduplicated: two key-value pairs with the same key are stored as fully separate key-value pairs.
Constructors
UnsafeParallelMultiHashMap(int, AllocatorHandle)
Initializes and returns an instance of UnsafeParallelMultiHashMap.
Declaration
public UnsafeParallelMultiHashMap(int capacity, AllocatorManager.AllocatorHandle allocator)
Parameters
Type | Name | Description |
---|---|---|
int | capacity | The number of key-value pairs that should fit in the initial allocation. |
AllocatorManager.AllocatorHandle | allocator | The allocator to use. |
Properties
Capacity
Returns the number of key-value pairs that fit in the current allocation.
Declaration
public int Capacity { readonly get; set; }
Property Value
Type | Description |
---|---|
int | The number of key-value pairs that fit in the current allocation. |
Exceptions
Type | Condition |
---|---|
InvalidOperationException | Thrown if |
IsCreated
Whether this hash map has been allocated (and not yet deallocated).
Declaration
public readonly bool IsCreated { get; }
Property Value
Type | Description |
---|---|
bool | True if this hash map has been allocated (and not yet deallocated). |
IsEmpty
Whether this hash map is empty.
Declaration
public readonly bool IsEmpty { get; }
Property Value
Type | Description |
---|---|
bool | True if this hash map is empty or the hash map has not been constructed. |
Methods
Add(TKey, TValue)
Adds a new key-value pair.
Declaration
public void Add(TKey key, TValue item)
Parameters
Type | Name | Description |
---|---|---|
TKey | key | The key to add. |
TValue | item | The value to add. |
Remarks
If a key-value pair with this key is already present, an additional separate key-value pair is added.
AsParallelWriter()
Returns a parallel writer for this hash map.
Declaration
public UnsafeParallelMultiHashMap<TKey, TValue>.ParallelWriter AsParallelWriter()
Returns
Type | Description |
---|---|
UnsafeParallelMultiHashMap<TKey, TValue>.ParallelWriter | A parallel writer for this hash map. |
AsReadOnly()
Returns a readonly version of this NativeParallelHashMap instance.
Declaration
public UnsafeParallelMultiHashMap<TKey, TValue>.ReadOnly AsReadOnly()
Returns
Type | Description |
---|---|
UnsafeParallelMultiHashMap<TKey, TValue>.ReadOnly | ReadOnly instance for this. |
Remarks
ReadOnly containers point to the same underlying data as the NativeParallelHashMap it is made from.
Clear()
Removes all key-value pairs.
Declaration
public void Clear()
Remarks
Does not change the capacity.
ContainsKey(TKey)
Returns true if a given key is present in this hash map.
Declaration
public readonly bool ContainsKey(TKey key)
Parameters
Type | Name | Description |
---|---|---|
TKey | key | The key to look up. |
Returns
Type | Description |
---|---|
bool | True if the key was present in this hash map. |
Count()
Returns the current number of key-value pairs in this hash map.
Declaration
public readonly int Count()
Returns
Type | Description |
---|---|
int | The current number of key-value pairs in this hash map. |
Remarks
Key-value pairs with matching keys are counted as separate, individual pairs.
CountValuesForKey(TKey)
Returns the number of values associated with a given key.
Declaration
public readonly int CountValuesForKey(TKey key)
Parameters
Type | Name | Description |
---|---|---|
TKey | key | The key to look up. |
Returns
Type | Description |
---|---|
int | The number of values associated with the key. Returns 0 if the key was not present. |
Dispose()
Releases all resources (memory and safety handles).
Declaration
public void Dispose()
Dispose(JobHandle)
Creates and schedules a job that will dispose this hash map.
Declaration
public JobHandle Dispose(JobHandle inputDeps)
Parameters
Type | Name | Description |
---|---|---|
JobHandle | inputDeps | A job handle. The newly scheduled job will depend upon this handle. |
Returns
Type | Description |
---|---|
JobHandle | The handle of a new job that will dispose this hash map. |
GetEnumerator()
Returns an enumerator over the key-value pairs of this hash map.
Declaration
public UnsafeParallelMultiHashMap<TKey, TValue>.KeyValueEnumerator GetEnumerator()
Returns
Type | Description |
---|---|
UnsafeParallelMultiHashMap<TKey, TValue>.KeyValueEnumerator | An enumerator over the key-value pairs of this hash map. |
Remarks
A key with N values is visited by the enumerator N times.
GetKeyArray(AllocatorHandle)
Returns an array with a copy of all the keys (in no particular order).
Declaration
public readonly NativeArray<TKey> GetKeyArray(AllocatorManager.AllocatorHandle allocator)
Parameters
Type | Name | Description |
---|---|---|
AllocatorManager.AllocatorHandle | allocator | The allocator to use. |
Returns
Type | Description |
---|---|
NativeArray<TKey> | An array with a copy of all the keys (in no particular order). |
Remarks
A key with N values is included N times in the array.
Use `GetUniqueKeyArray` of <xref href="Unity.Collections.NativeParallelHashMapExtensions" data-throw-if-not-resolved="false"></xref> instead if you only want one occurrence of each key.
GetKeyValueArrays(AllocatorHandle)
Returns a NativeKeyValueArrays with a copy of all the keys and values (in no particular order).
Declaration
public readonly NativeKeyValueArrays<TKey, TValue> GetKeyValueArrays(AllocatorManager.AllocatorHandle allocator)
Parameters
Type | Name | Description |
---|---|---|
AllocatorManager.AllocatorHandle | allocator | The allocator to use. |
Returns
Type | Description |
---|---|
NativeKeyValueArrays<TKey, TValue> | A NativeKeyValueArrays with a copy of all the keys and values (in no particular order). |
Remarks
A key with N values is included N times in the array.
GetValueArray(AllocatorHandle)
Returns an array with a copy of all the values (in no particular order).
Declaration
public readonly NativeArray<TValue> GetValueArray(AllocatorManager.AllocatorHandle allocator)
Parameters
Type | Name | Description |
---|---|---|
AllocatorManager.AllocatorHandle | allocator | The allocator to use. |
Returns
Type | Description |
---|---|
NativeArray<TValue> | An array with a copy of all the values (in no particular order). |
Remarks
The values are not deduplicated. If you sort the returned array, you can use Unique<T>(NativeArray<T>) to remove duplicate values.
GetValuesForKey(TKey)
Returns an enumerator over the values of an individual key.
Declaration
public UnsafeParallelMultiHashMap<TKey, TValue>.Enumerator GetValuesForKey(TKey key)
Parameters
Type | Name | Description |
---|---|---|
TKey | key | The key to get an enumerator for. |
Returns
Type | Description |
---|---|
UnsafeParallelMultiHashMap<TKey, TValue>.Enumerator | An enumerator over the values of a key. |
Remove(NativeParallelMultiHashMapIterator<TKey>)
Removes a single key-value pair.
Declaration
public void Remove(NativeParallelMultiHashMapIterator<TKey> it)
Parameters
Type | Name | Description |
---|---|---|
NativeParallelMultiHashMapIterator<TKey> | it | An iterator representing the key-value pair to remove. |
Exceptions
Type | Condition |
---|---|
InvalidOperationException | Thrown if the iterator is invalid. |
Remove(TKey)
Removes a key and its associated value(s).
Declaration
public int Remove(TKey key)
Parameters
Type | Name | Description |
---|---|---|
TKey | key | The key to remove. |
Returns
Type | Description |
---|---|
int | The number of removed key-value pairs. If the key was not present, returns 0. |
Remove<TValueEQ>(TKey, TValueEQ)
Removes all key-value pairs with a particular key and a particular value.
Declaration
public void Remove<TValueEQ>(TKey key, TValueEQ value) where TValueEQ : unmanaged, IEquatable<TValueEQ>
Parameters
Type | Name | Description |
---|---|---|
TKey | key | The key of the key-value pairs to remove. |
TValueEQ | value | The value of the key-value pairs to remove. |
Type Parameters
Name | Description |
---|---|
TValueEQ | The type of the value. |
Remarks
Removes all key-value pairs which have a particular key and which also have a particular value. In other words: (key AND value) rather than (key OR value).
SetValue(TValue, NativeParallelMultiHashMapIterator<TKey>)
Sets a new value for an existing key-value pair.
Declaration
public bool SetValue(TValue item, NativeParallelMultiHashMapIterator<TKey> it)
Parameters
Type | Name | Description |
---|---|---|
TValue | item | The new value. |
NativeParallelMultiHashMapIterator<TKey> | it | The iterator representing a key-value pair. |
Returns
Type | Description |
---|---|
bool | True if a value was overwritten. |
TryGetFirstValue(TKey, out TValue, out NativeParallelMultiHashMapIterator<TKey>)
Gets an iterator for a key.
Declaration
public readonly bool TryGetFirstValue(TKey key, out TValue item, out NativeParallelMultiHashMapIterator<TKey> it)
Parameters
Type | Name | Description |
---|---|---|
TKey | key | The key. |
TValue | item | Outputs the associated value represented by the iterator. |
NativeParallelMultiHashMapIterator<TKey> | it | Outputs an iterator. |
Returns
Type | Description |
---|---|
bool | True if the key was present. |
TryGetNextValue(out TValue, ref NativeParallelMultiHashMapIterator<TKey>)
Advances an iterator to the next value associated with its key.
Declaration
public readonly bool TryGetNextValue(out TValue item, ref NativeParallelMultiHashMapIterator<TKey> it)
Parameters
Type | Name | Description |
---|---|---|
TValue | item | Outputs the next value. |
NativeParallelMultiHashMapIterator<TKey> | it | A reference to the iterator to advance. |
Returns
Type | Description |
---|---|
bool | True if the key was present and had another value. |