add
This commit is contained in:
182
Assets/CoolapeFrame/Scripts/toolkit/ArrayEx.cs
Normal file
182
Assets/CoolapeFrame/Scripts/toolkit/ArrayEx.cs
Normal file
@@ -0,0 +1,182 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Coolape
|
||||
{
|
||||
public static class ArrayEx
|
||||
{
|
||||
public static int BinarySearch (this int[] array, int low, int high, int val)
|
||||
{
|
||||
while (low <= high) {
|
||||
int midpoint = (int)(((uint)high + (uint)low) >> 1);
|
||||
int v = array [midpoint];
|
||||
if (val == v) {
|
||||
return midpoint;
|
||||
} else if (val < v)
|
||||
high = midpoint - 1;
|
||||
else
|
||||
low = midpoint + 1;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
public static void Fill (this float[] array, float v)
|
||||
{
|
||||
for (int i = 0; i < array.Length; i++) {
|
||||
array [i] = v;
|
||||
}
|
||||
}
|
||||
|
||||
public static void Fill (this double[] array, double v)
|
||||
{
|
||||
for (int i = 0; i < array.Length; i++) {
|
||||
array [i] = v;
|
||||
}
|
||||
}
|
||||
|
||||
public static void Write2Matlab (this float[] array, string filename, string varname)
|
||||
{
|
||||
System.IO.StreamWriter file = new System.IO.StreamWriter (filename);
|
||||
file.WriteLine (varname + "=[");
|
||||
for (int c = 0; c < array.Length; c++) {
|
||||
file.WriteLine (array [c]);
|
||||
}
|
||||
file.WriteLine ("];");
|
||||
file.Close ();
|
||||
}
|
||||
|
||||
public static void CopyTo (this float[] array, float[] dest)
|
||||
{
|
||||
Array.Copy (array, dest, array.Length);
|
||||
}
|
||||
|
||||
public static void CopyTo (this double[] array, double[] dest)
|
||||
{
|
||||
Array.Copy (array, dest, array.Length);
|
||||
}
|
||||
|
||||
public static float Sum (this float[] array)
|
||||
{
|
||||
float sum = 0.0f;
|
||||
for (int i = 0; i < array.Length; i++) {
|
||||
sum += array [i];
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
public static double Sum (this double[] array)
|
||||
{
|
||||
double sum = 0.0f;
|
||||
for (int i = 0; i < array.Length; i++) {
|
||||
sum += array [i];
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
public static float Max (this float[] array)
|
||||
{
|
||||
float max = -float.MaxValue;
|
||||
for (int i = 0; i < array.Length; i++) {
|
||||
max = Mathf.Max (array [i], max);
|
||||
}
|
||||
return max;
|
||||
}
|
||||
|
||||
public static float MaxDelta (this float[] x, float[] y)
|
||||
{
|
||||
float change = 0.0f;
|
||||
for (int i = 0; i < x.Length; i++) {
|
||||
change = Mathf.Max (Math.Abs (x [i] - y [i]), change);
|
||||
}
|
||||
return change;
|
||||
}
|
||||
|
||||
public static double Max (this double[] array)
|
||||
{
|
||||
double max = -float.MaxValue;
|
||||
for (int i = 0; i < array.Length; i++) {
|
||||
max = Math.Max (array [i], max);
|
||||
}
|
||||
return max;
|
||||
}
|
||||
|
||||
public static double MaxDelta (this double[] x, double[] y)
|
||||
{
|
||||
double change = 0.0f;
|
||||
for (int i = 0; i < x.Length; i++) {
|
||||
change = Math.Max (Math.Abs (x [i] - y [i]), change);
|
||||
}
|
||||
return change;
|
||||
}
|
||||
|
||||
public static void MultiplyWith (this float[] x, float[] y)
|
||||
{
|
||||
for (int i = 0; i < x.Length; i++) {
|
||||
x [i] *= y [i];
|
||||
}
|
||||
}
|
||||
|
||||
public static void MultiplyWith (this float[] x, float y)
|
||||
{
|
||||
for (int i = 0; i < x.Length; i++) {
|
||||
x [i] *= y;
|
||||
}
|
||||
}
|
||||
|
||||
public static void DivideBy (this float[] x, float[] y)
|
||||
{
|
||||
for (int i = 0; i < x.Length; i++) {
|
||||
x [i] /= y [i];
|
||||
}
|
||||
}
|
||||
|
||||
public static float Dot (this float[] x, float[] y)
|
||||
{
|
||||
float dotProduct = 0.0f;
|
||||
for (int i = 0; i < x.Length; i++) {
|
||||
dotProduct += x [i] * y [i];
|
||||
}
|
||||
return dotProduct;
|
||||
}
|
||||
|
||||
public static void MultiplyWith (this double[] x, double[] y)
|
||||
{
|
||||
for (int i = 0; i < x.Length; i++) {
|
||||
x [i] *= y [i];
|
||||
}
|
||||
}
|
||||
|
||||
public static void MultiplyWith (this double[] x, double y)
|
||||
{
|
||||
for (int i = 0; i < x.Length; i++) {
|
||||
x [i] *= y;
|
||||
}
|
||||
}
|
||||
|
||||
public static void DivideBy (this double[] x, double[] y)
|
||||
{
|
||||
for (int i = 0; i < x.Length; i++) {
|
||||
x [i] /= y [i];
|
||||
}
|
||||
}
|
||||
|
||||
public static double Dot (this double[] x, double[] y)
|
||||
{
|
||||
double dotProduct = 0.0f;
|
||||
for (int i = 0; i < x.Length; i++) {
|
||||
dotProduct += x [i] * y [i];
|
||||
}
|
||||
return dotProduct;
|
||||
}
|
||||
|
||||
public static string ToStringPretty (this float[] x)
|
||||
{
|
||||
string res = "[";
|
||||
for (int i = 0; i < x.Length; i++) {
|
||||
res += x [i] + ", ";
|
||||
}
|
||||
res += "]";
|
||||
return res;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user