17 static int GetWeightedIndex(notnull array<float> weights,
float value01)
19 if (weights.IsEmpty())
22 if (value01 < 0 || value01 > 1)
23 value01 =
Math.Mod(value01, 1);
26 for (
int i, count = weights.Count(); i < count; i++)
28 probabilitySum += weights[i];
32 probabilitySum *= value01;
34 for (
int i, count = weights.Count(); i < count; i++)
37 if (add > probabilitySum)
48class SCR_ArrayHelperT<
Class T>
55 static bool AreEqual(notnull array<T> array1, notnull array<T> array2)
57 if (array1.Count() != array2.Count())
60 foreach (
int i,
T value : array1)
62 if (array2[i] != value)
232 static bool AreEqual(notnull array<ref T> array1, notnull array<ref T> array2)
234 if (array1.Count() != array2.Count())
237 foreach (
int i,
T value : array1)
239 if (array2[i] != value)
251 static void CopyReferencesFromTo(notnull array<ref T> source, notnull array<ref T> destination)
254 foreach (
T sourceRef : source)
256 destination.Insert(sourceRef);
263 static array<ref T> GetCopy(array<ref T> source)
268 array<ref T> result = {};
269 foreach (
T sourceRef : source)
271 result.Insert(sourceRef);
280 static array<T> GetNonRefCopy(array<ref T> source)
285 array<T> result = {};
286 foreach (
T sourceRef : source)
288 result.Insert(sourceRef);
299 static void Intersect(notnull array<ref T> array1, notnull array<ref T> array2, notnull out array<ref T> result)
302 int count1 = array1.Count();
303 int count2 = array2.Count();
306 for (
int i = array2.Count() - 1; i >= 0; i--)
308 if (array1.Contains(array2[i]))
309 result.Insert(array2[i]);
314 for (
int i = array1.Count() - 1; i >= 0; i--)
316 if (array2.Contains(array1[i]))
317 result.Insert(array1[i]);
325 static void RemoveDuplicates(notnull inout array<ref T> items)
327 for (
int i = items.Count() - 1; i >= 0; --i)
329 if (items.Find(items[i]) != i)
330 items.RemoveOrdered(i);
343 static void Reverse(notnull inout array<ref T> items)
345 int itemsCount = items.Count();
349 int flooredMiddle = itemsCount * 0.5;
367 for (
int i; i < flooredMiddle; i++)
369 items.SwapItems(i, itemsCount - i);
382 static void ShuffleRef(notnull inout array<ref T> items,
int shuffles = 1)
384 if (items.Count() < 2)
396 for (
int i = 0, count = items.Count(); i < count; i++)
398 int index1 =
Math.RandomInt(0, count);
399 int index2 =
Math.RandomInt(0, count);
400 if (index1 != index2)
401 items.SwapItems(index1, index2);
412 static void InsertAll(notnull array<ref T> destination, notnull array<ref T> source)
414 foreach (
T entry : source)
416 destination.Insert(entry);