Package org.apache.commons.math3.util

# Class MultidimensionalCounter

java.lang.Object
org.apache.commons.math3.util.MultidimensionalCounter

All Implemented Interfaces:
  `Iterable<Integer>`

public class MultidimensionalCounter extends Object implements Iterable<Integer>
Converter between unidimensional storage structure and multidimensional conceptual structure. This utility will convert from indices in a multidimensional structure to the corresponding index in a one-dimensional array. For example, assuming that the ranges (in 3 dimensions) of indices are 2, 4 and 3, the following correspondences, between 3-tuples indices and unidimensional indices, will hold:

- (0, 0, 0) corresponds to 0
- (0, 0, 1) corresponds to 1
- (0, 0, 2) corresponds to 2
- (0, 1, 0) corresponds to 3
- ...
- (1, 0, 0) corresponds to 12
- ...
- (1, 3, 2) corresponds to 23

Since:
  2.2

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`class`
`MultidimensionalCounter.Iterator`
Perform iteration over the multidimensional counter.

## Constructor Summary

Constructors
Constructor
Description
`MultidimensionalCounter(int... size)`
Create a counter.

## Method Summary

Modifier and Type
Method
Description
`int`
`getCount(int... c)`
Convert to unidimensional counter.
`int[]`
`getCounts(int index)`
Convert to multidimensional counter.
`int`
`getDimension()`
Get the number of dimensions of the multidimensional counter.
`int`
`getSize()`
Get the total number of elements.
`int[]`
`getSizes()`
Get the number of multidimensional counter slots in each dimension.
`MultidimensionalCounter.Iterator`
`iterator()`
Create an iterator over this counter.
`String`
`toString()`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Methods inherited from interface java.lang.Iterable

`forEach, spliterator`

## Constructor Details

### MultidimensionalCounter

public MultidimensionalCounter(int... size) throws NotStrictlyPositiveException
Create a counter.

Parameters:
  `size` - Counter sizes (number of slots in each dimension).
Throws:
  `NotStrictlyPositiveException` - if one of the sizes is negative or zero.

## Method Details

### iterator

public MultidimensionalCounter.Iterator iterator()
Create an iterator over this counter.

Specified by:
  `iterator` in interface `Iterable<Integer>`
Returns:
  the iterator.

### getDimension

public int getDimension()
Get the number of dimensions of the multidimensional counter.

Returns:
  the number of dimensions.

### getCounts

public int[] getCounts(int index) throws OutOfRangeException
Convert to multidimensional counter.

Parameters:
  `index` - Index in unidimensional counter.
Returns:
  the multidimensional counts.
Throws:
  `OutOfRangeException` - if `index` is not between `0` and the value returned by `getSize()` (excluded).

### getCount

public int getCount(int... c) throws OutOfRangeException, DimensionMismatchException
Convert to unidimensional counter.

Parameters:
  `c` - Indices in multidimensional counter.
Returns:
  the index within the unidimensionl counter.
Throws:
  `DimensionMismatchException` - if the size of `c` does not match the size of the array given in the constructor.
  `OutOfRangeException` - if a value of `c` is not in the range of the corresponding dimension, as defined in the `constructor`.

### getSize

public int getSize()
Get the total number of elements.

Returns:
  the total size of the unidimensional counter.

### getSizes

public int[] getSizes()
Get the number of multidimensional counter slots in each dimension.

Returns:
  the sizes of the multidimensional counter in each dimension.

### toString

public String toString()

Overrides:
  `toString` in class `Object`