As a continuation of my question here , I am trying to implement the following PHP function in Objective-C, which will generate a Cartesian product:
function array_cartesian_product($arrays) { $result = array(); $arrays = array_values($arrays); $sizeIn = sizeof($arrays); $size = $sizeIn > 0 ? 1 : 0; foreach ($arrays as $array) $size = $size * sizeof($array); for ($i = 0; $i < $size; $i ++) { $result[$i] = array(); for ($j = 0; $j < $sizeIn; $j ++) array_push($result[$i], current($arrays[$j])); for ($j = ($sizeIn -1); $j >= 0; $j --) { if (next($arrays[$j])) break; elseif (isset ($arrays[$j])) reset($arrays[$j]); } } return $result; }
Here is what I still have:
-(NSArray *) array_cartesian_product:(NSArray *)arrays { NSMutableArray *result = [[NSMutableArray alloc] init]; int sizeIn = [arrays count]; int size = (sizeIn > 0) ? 1 : 0; for(id array in arrays) size *= [array count]; for(int i = 0; i < size; i++) { for (int j = 0; j < sizeIn; j++) { [result insertObject:[arrays objectAtIndex:j] atIndex:i]; } for (int j = (sizeIn - 1); j >= 0; j--) {
I get lost when trying to encode the equivalent of the PHP functions next , current and reset , since I do not know how to refer to an internal pointer to an array.
How can I implement the last block of code and get an equivalent function?
source share