// Catalano Core Library
// The Catalano Framework
//
// Copyright © Diego Catalano, 2012-2016
// diego.catalano at live.com
//
//
// Contains some methods for arrays, distributed
// under the BSD license. The original license terms are given below:
//
// Copyright © Albert Strasheim, 2008
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in
// the documentation and/or other materials provided with the distribution
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
package Catalano.Core;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Random;
/**
* Array Utilities.
* @author Diego Catalano
*/
public class ArraysUtil {
/**
* Don`t let anyone to instantiate this class.
*/
private ArraysUtil() {}
/**
* Returns the indices that would sort an array.
* @param array Array.
* @param ascending Ascending order.
* @return Array of indices.
*/
public static int[] Argsort(final double[] array, final boolean ascending) {
Integer[] indexes = new Integer[array.length];
for (int i = 0; i < indexes.length; i++) {
indexes[i] = i;
}
Arrays.sort(indexes, new Comparator() {
@Override
public int compare(final Integer i1, final Integer i2) {
return (ascending ? 1 : -1) * Double.compare(array[i1], array[i2]);
}
});
return asArray(indexes);
}
/**
* Returns the indices that would sort an array.
* @param array Array.
* @param ascending Ascending order.
* @return Array of indices.
*/
public static int[] Argsort(final int[] array, final boolean ascending) {
Integer[] indexes = new Integer[array.length];
for (int i = 0; i < indexes.length; i++) {
indexes[i] = i;
}
Arrays.sort(indexes, new Comparator() {
@Override
public int compare(final Integer i1, final Integer i2) {
return (ascending ? 1 : -1) * Integer.compare(array[i1], array[i2]);
}
});
return asArray(indexes);
}
/**
* Returns the indices that would sort an array.
* @param array Array.
* @param ascending Ascending order.
* @return Array of indices.
*/
public static int[] Argsort(final float[] array, final boolean ascending) {
Integer[] indexes = new Integer[array.length];
for (int i = 0; i < indexes.length; i++) {
indexes[i] = i;
}
Arrays.sort(indexes, new Comparator() {
@Override
public int compare(final Integer i1, final Integer i2) {
return (ascending ? 1 : -1) * Float.compare(array[i1], array[i2]);
}
});
return asArray(indexes);
}
public static boolean Contains(int[] array, int element){
for (int i = 0; i < array.length; i++) {
if(array[i] == element)
return true;
}
return false;
}
/**
* Concatenate the arrays.
* @param array First array.
* @param array2 Second array.
* @return Concatenate between first and second array.
*/
public static int[] Concatenate(int[] array, int[] array2){
int[] all = new int[array.length + array2.length];
int idx = 0;
//First array
for (int i = 0; i < array.length; i++)
all[idx++] = array[i];
//Second array
for (int i = 0; i < array2.length; i++)
all[idx++] = array2[i];
return all;
}
/**
* Concatenate the arrays.
* @param array First array.
* @param array2 Second array.
* @return Concatenate between first and second array.
*/
public static double[] Concatenate(double[] array, double[] array2){
double[] all = new double[array.length + array2.length];
int idx = 0;
//First array
for (int i = 0; i < array.length; i++)
all[idx++] = array[i];
//Second array
for (int i = 0; i < array2.length; i++)
all[idx++] = array2[i];
return all;
}
/**
* Concatenate the arrays.
* @param array First array.
* @param array2 Second array.
* @return Concatenate between first and second array.
*/
public static float[] Concatenate(float[] array, float[] array2){
float[] all = new float[array.length + array2.length];
int idx = 0;
//First array
for (int i = 0; i < array.length; i++)
all[idx++] = array[i];
//Second array
for (int i = 0; i < array2.length; i++)
all[idx++] = array2[i];
return all;
}
/**
* Concatenate all the arrays in the list into a vector.
* @param arrays List of arrays.
* @return Vector.
*/
public static int[] ConcatenateInt(List arrays){
int size = 0;
for (int i = 0; i < arrays.size(); i++) {
size += arrays.get(i).length;
}
int[] all = new int[size];
int idx = 0;
for (int i = 0; i < arrays.size(); i++) {
int[] v = arrays.get(i);
for (int j = 0; j < v.length; j++) {
all[idx++] = v[i];
}
}
return all;
}
/**
* Concatenate all the arrays in the list into a vector.
* @param arrays List of arrays.
* @return Vector.
*/
public static double[] ConcatenateDouble(List arrays){
int size = 0;
for (int i = 0; i < arrays.size(); i++) {
size += arrays.get(i).length;
}
double[] all = new double[size];
int idx = 0;
for (int i = 0; i < arrays.size(); i++) {
double[] v = arrays.get(i);
for (int j = 0; j < v.length; j++) {
all[idx++] = v[i];
}
}
return all;
}
/**
* Concatenate all the arrays in the list into a vector.
* @param arrays List of arrays.
* @return Vector.
*/
public static float[] ConcatenateFloat(List arrays){
int size = 0;
for (int i = 0; i < arrays.size(); i++) {
size += arrays.get(i).length;
}
float[] all = new float[size];
int idx = 0;
for (int i = 0; i < arrays.size(); i++) {
float[] v = arrays.get(i);
for (int j = 0; j < v.length; j++) {
all[idx++] = v[i];
}
}
return all;
}
/**
* Convert any number class to array of integer.
* @param Type.
* @param array Array.
* @return Integer array.
*/
public static int[] asArray(final T... array) {
int[] b = new int[array.length];
for (int i = 0; i < b.length; i++) {
b[i] = array[i].intValue();
}
return b;
}
/**
* Shuffle an array.
* @param array Array.
*/
public static void Shuffle(double[] array){
Shuffle(array, 0);
}
/**
* Shuffle an array.
* @param array Array.
* @param seed Random seed.
*/
public static void Shuffle(double[] array, long seed){
Random random = new Random();
if(seed != 0) random.setSeed(seed);
for (int i = array.length - 1; i > 0; i--)
{
int index = random.nextInt(i + 1);
double temp = array[index];
array[index] = array[i];
array[i] = temp;
}
}
/**
* Shuffle an array.
* @param array Array.
*/
public static void Shuffle(int[] array){
Shuffle(array, 0);
}
/**
* Shuffle an array.
* @param array Array.
* @param seed Seed of the random.
*/
public static void Shuffle(int[] array, long seed){
Random random = new Random();
if(seed != 0) random.setSeed(seed);
for (int i = array.length - 1; i > 0; i--)
{
int index = random.nextInt(i + 1);
int temp = array[index];
array[index] = array[i];
array[i] = temp;
}
}
/**
* Shuffle an array.
* @param array Array.
*/
public static void Shuffle(float[] array){
Shuffle(array, 0);
}
/**
* Shuffle an array.
* @param array Array.
* @param seed Random seed.
*/
public static void Shuffle(float[] array, long seed){
Random random = new Random();
if(seed != 0) random.setSeed(seed);
for (int i = array.length - 1; i > 0; i--)
{
int index = random.nextInt(i + 1);
float temp = array[index];
array[index] = array[i];
array[i] = temp;
}
}
/**
* Shuffle an array.
* @param array Array.
*/
public static void Shuffle(T[] array){
Shuffle(array, 0);
}
/**
* Shuffle an array.
* @param array Array.
* @param seed Random seed.
*/
public static void Shuffle(T[] array, long seed){
Random random = new Random();
if(seed != 0) random.setSeed(seed);
for (int i = array.length - 1; i > 0; i--)
{
int index = random.nextInt(i + 1);
T temp = array[index];
array[index] = array[i];
array[i] = temp;
}
}
/**
* 1-D Integer array to float array.
* @param array Integer array.
* @return Float array.
*/
public static float[] toFloat(int[] array){
float[] n = new float[array.length];
for (int i = 0; i < array.length; i++) {
n[i] = (float)array[i];
}
return n;
}
/**
* 2-D Integer array to float array.
* @param array Integer array.
* @return Float array.
*/
public static float[][] toFloat(int[][] array){
float[][] n = new float[array.length][array[0].length];
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[0].length; j++) {
n[i][j] = (float)array[i][j];
}
}
return n;
}
/**
* 1-D Double array to float array.
* @param array Double array.
* @return Float array.
*/
public static float[] toFloat(double[] array){
float[] n = new float[array.length];
for (int i = 0; i < array.length; i++) {
n[i] = (float)array[i];
}
return n;
}
/**
* 2-D Double array to float array.
* @param array Double array.
* @return Float array.
*/
public static float[][] toFloat(double[][] array){
float[][] n = new float[array.length][array[0].length];
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[0].length; j++) {
n[i][j] = (float)array[i][j];
}
}
return n;
}
/**
* List of floats to array.
* @param ints List of floats.
* @return Array float.
*/
public static float[] toFloat(List ints){
float[] n = new float[ints.size()];
for (int i = 0; i < n.length; i++) {
n[i] = ints.get(i);
}
return n;
}
/**
* 1-D Double array to integer array.
* @param array Double array.
* @return Integer array.
*/
public static int[] toInt(double[] array){
int[] n = new int[array.length];
for (int i = 0; i < array.length; i++) {
n[i] = (int)array[i];
}
return n;
}
/**
* 2-D Double array to integer array.
* @param array Double array.
* @return Integer array.
*/
public static int[][] toInt(double[][] array){
int[][] n = new int[array.length][array[0].length];
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[0].length; j++) {
n[i][j] = (int)array[i][j];
}
}
return n;
}
/**
* List of integer to array.
* @param ints List of integers.
* @return Array int.
*/
public static int[] toInt(List ints){
int[] n = new int[ints.size()];
for (int i = 0; i < n.length; i++) {
n[i] = ints.get(i);
}
return n;
}
/**
* 1-D Float array to integer array.
* @param array Float array.
* @return Integer array.
*/
public static int[] toInt(float[] array){
int[] n = new int[array.length];
for (int i = 0; i < array.length; i++) {
n[i] = (int)array[i];
}
return n;
}
/**
* 2-D Float array to integer array.
* @param array Float array.
* @return Integer array.
*/
public static int[][] toInt(float[][] array){
int[][] n = new int[array.length][array[0].length];
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[0].length; j++) {
n[i][j] = (int)array[i][j];
}
}
return n;
}
/**
* 1-D Integer array to double array.
* @param array Integer array.
* @return Double array.
*/
public static double[] toDouble(int[] array){
double[] n = new double[array.length];
for (int i = 0; i < array.length; i++) {
n[i] = (double)array[i];
}
return n;
}
/**
* 2-D Integer array to double array.
* @param array Integer array.
* @return Double array.
*/
public static double[][] toDouble(int[][] array){
double[][] n = new double[array.length][array[0].length];
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[0].length; j++) {
n[i][j] = (double)array[i][j];
}
}
return n;
}
/**
* 1-D Float array to double array.
* @param array Float array.
* @return Double array.
*/
public static double[] toDouble(float[] array){
double[] n = new double[array.length];
for (int i = 0; i < array.length; i++) {
n[i] = (double)array[i];
}
return n;
}
/**
* 2-D Float array to double array.
* @param array Float array.
* @return Double array.
*/
public static double[][] toDouble(float[][] array){
double[][] n = new double[array.length][array[0].length];
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[0].length; j++) {
n[i][j] = (double)array[i][j];
}
}
return n;
}
/**
* List of doubles to array.
* @param ints List of doubles.
* @return Array double.
*/
public static double[] toDouble(List ints){
double[] n = new double[ints.size()];
for (int i = 0; i < n.length; i++) {
n[i] = ints.get(i);
}
return n;
}
}
Ads help maintain this website.