https://github.com/varneon/vudon-arrayextensions
Collection of array extension methods compatible with UdonSharp 1.x which adds partial feature set from List<T>
https://github.com/varneon/vudon-arrayextensions
udonsharp vrchat vrchat-sdk3 vrchat-udon vrcsdk3-worlds
Last synced: 2 months ago
JSON representation
Collection of array extension methods compatible with UdonSharp 1.x which adds partial feature set from List<T>
- Host: GitHub
- URL: https://github.com/varneon/vudon-arrayextensions
- Owner: Varneon
- License: mit
- Created: 2022-08-10T00:52:47.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2025-08-05T03:26:04.000Z (3 months ago)
- Last Synced: 2025-08-05T04:24:10.524Z (3 months ago)
- Topics: udonsharp, vrchat, vrchat-sdk3, vrchat-udon, vrcsdk3-worlds
- Language: C#
- Homepage:
- Size: 51.8 KB
- Stars: 38
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# [VUdon](https://github.com/Varneon/VUdon) - Array Extensions  [](https://github.com/Varneon/VUdon-ArrayExtensions/stargazers) [](https://github.com/Varneon/VUdon-ArrayExtensions/releases) [](https://github.com/Varneon/VUdon-ArrayExtensions/releases/latest)
Collection of array extension methods compatible with UdonSharp 1.x which adds partial feature set from List
>[!IMPORTANT]
>Array Extensions' `Add`, `AddRange`, `AddUnique`, `Insert`, `InsertRange`, `Remove`, `RemoveAt` and `RemoveRange` methods are intended for use cases that meet the following criteria:
>- [Array must be used instead of a DataList](https://creators.vrchat.com/worlds/udon/data-containers/data-lists/#when-should-i-use-an-array-instead-of-a-datalist) *(Commonly due to frequent iteration per frame)*
>- Methods listed above are invoked infrequently *(They have a high performance cost in exchange for the ability to manipulate arrays)*
| **Method** | **Parameters** | **Returns** | **Description** |
| - | - | - | - |
| `Add` | `T` | `T[]` | *Adds an item to an array* |
| `AddRange` | `T[]` | `T[]` | *Adds the elements of the specified collection to the end of the array* |
| `AddUnique` | `T` | `T[]` | *Adds an item to an array and ensures duplicates are not added* |
| `Contains` | `T` | `bool` | *Determines whether an element is in the array* |
| `FirstOrDefault` | | `T` | *Returns the first element, or default value if the array is empty* |
| `GetElementTypeUdon` | | `Type` | *Gets the element type of the array type* |
| `GetRange` | `Int, Int` | `T[]` | *Creates a shallow copy of a range of elements in the source* |
| `IndexOf` | `T` (`Int`, `Int`) | `Int` | *Returns the zero-based index of the first occurrence of a value in the T[]* |
| `Insert` | `Int, T` | `T[]` | *Inserts item to array at index* |
| `InsertRange` | `Int, T[]` | `T[]` | *Inserts the elements of a collection into the [] at the specified index* |
| `LastIndexOf` | `T` (`Int`, `Int`) | `Int` | *Returns the zero-based index of the last occurrence of a value in the T[]* |
| `LastOrDefault` | | `T` | *Returns the last element, or default value if the array is empty* |
| `Remove` | `T` | `T[]` | *Removes item from array* |
| `RemoveAt` | `Int` | `T[]` | *Removes item at index from array* |
| `RemoveRange` | `Int, Int` | `T[]` | *Removes a range of elements from the T[]* |
| `Resize` | `Int` | `T[]` | *Resizes array* |
| `Reverse` | | `T[]` | *Reverses Array* |
> [!CAUTION]
> For performance reasons this extension method library doesn't implement null checks! Please ensure the arrays you're accessing with the methods from this library are initialized.
## Usage Demonstration
```csharp
using UdonSharp;
using UnityEngine;
using Varneon.VUdon.ArrayExtensions;
public class UdonArrayExtensionDemo : UdonSharpBehaviour
{
[SerializeField]
private string[] strings;
[SerializeField]
private string[] range;
[SerializeField]
private string text;
[SerializeField]
private int index;
[SerializeField]
private int count;
public void UsageDemo()
{
// Add item to array
strings = strings.Add(text);
// Add range of elements to array
strings = strings.AddRange(range);
// Check if item is contained in array
Debug.Log(strings.Contains(text));
// Get range of elements in array
Debug.Log(string.Join("\n", strings.GetRange(index, count)));
// Get the first index of element in array
Debug.Log(strings.IndexOf(text));
// Get the first index of element in array, starting at index
Debug.Log(strings.IndexOf(text, index));
// Get the first index of element in array in a range starting at index at the size of count
Debug.Log(strings.IndexOf(text, index, count));
// Insert item to array
strings = strings.Insert(index, text);
// Insert array of items to array
strings = strings.InsertRange(index, range);
// Get the last index of element in array
Debug.Log(strings.LastIndexOf(text));
// Get the last index of element in array, starting at index
Debug.Log(strings.LastIndexOf(text, index));
// Get the last index of element in array in a range starting at index at the size of count
Debug.Log(strings.LastIndexOf(text, index, count));
// Remove item from array
strings = strings.Remove(text);
// Remove item at index from array
strings = strings.RemoveAt(index);
// Remove range of elements from array
strings = strings.RemoveRange(index, count);
// Reverse array
strings = strings.Reverse();
// Get the first element in array
Debug.Log(strings.FirstOrDefault());
// Get the last element in array
Debug.Log(strings.LastOrDefault());
// Get the element type of a type
Debug.Log(strings.GetType().GetElementTypeUdon());
// Add unique item to array (if item exists in array, it won't be added)
strings = strings.AddUnique(text);
// Resize array
strings = strings.Resize(index);
}
}
```
# Installation
### Import with [VRChat Creator Companion](https://vcc.docs.vrchat.com/vpm/packages#user-packages)
> Coming Soon™
### Import with [Unity Package Manager (git)](https://docs.unity3d.com/2022.3/Documentation/Manual/upm-ui-giturl.html)
> 1. In the Unity toolbar, select `Window` > `Package Manager` > `[+]` > `Add package from git URL...`
> 2. Paste the following link: `https://github.com/Varneon/VUdon-ArrayExtensions.git?path=/Packages/com.varneon.vudon.array-extensions`
### Import from [Unitypackage](https://docs.unity3d.com/2022.3/Documentation/Manual/AssetPackagesImport.html)
> 1. Download latest `com.varneon.vudon.array-extensions.unitypackage` from [here](https://github.com/Varneon/VUdon-ArrayExtensions/releases/latest)
> 2. Import the downloaded .unitypackage into your Unity project
## Developed by Varneon with :hearts:
[](https://twitter.com/Varneon)
[](https://www.youtube.com/Varneon)
[](https://github.com/Varneon)