# MathHelper

This static class provides pretty wide range of additional math functionality.

### Available methods

```csharp
public static string ToRoundedString(this float _value, int _digits = 1)
```

*This extension method creates string from given float number, rounded to certain count of digits after dot symbol.*

*Example:*

```csharp
Debug.Log($"First 3 digits of PI: {Mathf.PI.ToRoundedString(2)});

// Output: 3.14
```

***

```csharp
public static string ToShortenedNumber(this int number)
```

*This extension method returns shortened representation of given integer number. For example, 10.000 will be converted to "10k" and 1.500.000 will be converted to "1,5M".*

*Example:*

```csharp
Debug.Log(1000.ToShortenedNumber());
Debug.Log(1500000.ToShortenedNumber());

// Output:
// 1k
// 1,5M
```

***

```csharp
public static void AddUnique<T>(this IList<T> self, IEnumerable<T> items)
```

*This extension method adds unique elements from given **items** collection to given list. It adds all elements which are not yet presented in this list.*

*Example:*

```csharp
List<int> list1 = new List<int> { 1, 3, 5 };
List<int> list2 = new List<int> { 1, 3, 8, 0 };

list1.AddUnique(list2);

string results = "";
foreach (int i in list1)
{
    results += i.ToString() + ", ";
}
Debug.Log(results);

// Output:
// 1, 3, 5, 8, 0,
```

***

```csharp
public static void Shuffle<T>(this IList<T> list)
```

*This extension method randomly shuffles given **list**.*

*Example:*

```csharp
List<int> list = new List<int> { 1, 2, 3, 4 };

list.Shuffle();
```

***

```csharp
public static void Shuffle<T>(this List<T> list)
```

*It does the same as previous one.*

***

```csharp
public static void SortByDistance<T>(this List<T> list, Vector3 from) where T : Transform
```

*This extension method sorts given **list** of Transforms by distance from given point, from closest one to farthest one.*

{% hint style="info" %}
This method could be useful if you need to find closest enemy or closest pickup to a certain game character.
{% endhint %}

***

```csharp
public static T GetRandomElement<T>(this List<T> list)
```

*This extension method returns random item from given **list**. If list is empty, it returns **default** value of given type.*

*Example:*

```csharp
// Code of imaginary turn based card game :)
// Getting random card from deck
Card nextCard = cardsDeck.GetRandomElement();

UseCard(nextCard);
```

***

```csharp
public static T GetRandomElementExceptOne<T>(this List<T> list, T exceptedOne)
```

*This extension method returns random item from given **list**, except certain item. If it cannot find such item, it returns* exceptedOne *item instead.*

Example:

```csharp
List<int> testList = new List<int>{0, 5, 13, 42, 50};

int randNumExcept42 = testList.GetRandomElementExceptOne(42);
// This will return 0, 5, 13 or 50
```
