using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
using System;

/// <summary>
/// Utility Class used for common methodes which don't fit in a class
/// </summary>
public static class Utility
{

    /// <summary>
    /// Gets the smallest item in an array based on the provided function
    /// </summary>
    /// <typeparam name="T">Array type</typeparam>
    /// <param name="values">Array to find smallest item in</param>
    /// <param name="predicate">What to compare items with</param>
    /// <returns></returns>
    public static T minBy<T>(T[] values, Func<T,IComparable> predicate)
    {
        //if empty return null
        if (values.Length == 0)
            return default;

        //Define smallest value as first
        T min = values[0];

        //compare all other values
        for (int i = 1; i < values.Length; i++)
            if (predicate(values[i]).CompareTo(predicate(min)) < 0)
                min = values[i];

        //return
        return min;
    }

}
