1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- using System.Collections.Generic;
- namespace FirstGearGames.Utilities.Objects
- {
- public static class Arrays
- {
- /// <summary>
- /// Randomizer used for shuffling.
- /// </summary>
- private static System.Random _random = new System.Random();
- /// <summary>
- /// Adds an entry to a list if it does not exist already.
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name=""></param>
- /// <param name="value"></param>
- public static void AddUnique<T>(this List<T> list, object value)
- {
- if (!list.Contains((T)value))
- list.Add((T)value);
- }
- /// <summary>
- /// Removes an object from a list through re-ordering. This breaks the order of the list for a faster remove.
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="list"></param>
- /// <param name="value"></param>
- /// <returns></returns>
- public static bool FastReferenceRemove<T>(this List<T> list, object value)
- {
- for (int i = 0; i < list.Count; i++)
- {
- if (object.ReferenceEquals(list[i], value))
- {
- FastIndexRemove(list, i);
- return true;
- }
- }
- return false;
- }
- /// <summary>
- /// Removes an index from a list through re-ordering. This breaks the order of the list for a faster remove.
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="list"></param>
- /// <param name="index"></param>
- public static void FastIndexRemove<T>(this List<T> list, int index)
- {
- list[index] = list[list.Count - 1];
- list.RemoveAt(list.Count - 1);
- }
- /// <summary>
- /// Shuffles an array.
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="array"></param>
- public static void Shuffle<T>(this T[] array)
- {
- int n = array.Length;
- for (int i = 0; i < (n - 1); i++)
- {
- int r = i + _random.Next(n - i);
- T t = array[r];
- array[r] = array[i];
- array[i] = t;
- }
- }
- }
- }
|