Php 如何完成笛卡尔积函数的Objective-C实现?

Php 如何完成笛卡尔积函数的Objective-C实现?,php,iphone,objective-c,cartesian-product,code-conversion,Php,Iphone,Objective C,Cartesian Product,Code Conversion,作为我问题的后续,我尝试在Objective-C中实现以下PHP函数,该函数将生成笛卡尔乘积: function array_cartesian_product($arrays) { $result = array(); $arrays = array_values($arrays); $sizeIn = sizeof($arrays); $size = $sizeIn > 0 ? 1 : 0; foreach ($arrays as $array)

作为我问题的后续,我尝试在Objective-C中实现以下PHP函数,该函数将生成笛卡尔乘积:

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;
}
函数数组\u笛卡尔乘积($array)
{
$result=array();
$arrays=数组值($arrays);
$sizeIn=sizeof($arrays);
$size=$sizeIn>0?1:0;
foreach($array作为$array)
$size=$size*sizeof($array);
对于($i=0;$i<$size;$i++)
{
$result[$i]=array();
对于($j=0;$j<$sizeIn;$j++)
数组推送($result[$i],current($arrays[$j]);
对于($j=($sizeIn-1);$j>=0;$j--)
{
if(下一个($arrays[$j]))
打破
elseif(isset($arrays[$j]))
重置($arrays[$j]);
}
}
返回$result;
}
以下是我到目前为止的情况:

-(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--) {

            // ?????

        }


    }

    return result;

}
-(NSArray*)数组\u笛卡尔积:(NSArray*)数组{
NSMUTABLEARRY*结果=[[NSMUTABLEARRY alloc]init];
int sizeIn=[arrays count];
int size=(sizeIn>0)?1:0;
for(数组中的id数组)
大小*=[数组计数];
对于(int i=0;i=0;j--){
// ?????
}
}
返回结果;
}
当我尝试编写PHP的
next
current
reset
函数的等效函数时,我会迷路,因为我不知道如何引用指向数组的内部指针


如何实现最后一段代码并获得等效函数?

NSArray NSMutableArray没有下一个当前重置函数。 我认为您可以编写一个类来实现这样的功能

@interface myArray {
    NSMutableArray* array;//the real array
    int index;//hole the index
}

-(id)current;
-(id)next;
-(id)reset;
@end
3函数将修改索引,

NSArray*cartesianproductofarray(NSArray*arrays)
NSArray *cartesianProductOfArrays(NSArray *arrays)
{
    int arraysCount = arrays.count;
    unsigned long resultSize = 1;
    for (NSArray *array in arrays)
        resultSize *= array.count;
    NSMutableArray *product = [NSMutableArray arrayWithCapacity:resultSize];
    for (unsigned long i = 0; i < resultSize; ++i) {
        NSMutableArray *cross = [NSMutableArray arrayWithCapacity:arraysCount];
        [product addObject:cross];
        unsigned long n = i;
        for (NSArray *array in arrays) {
            [cross addObject:[array objectAtIndex:n % array.count]];
            n /= array.count;
        }
    }
    return product;
}
{ int arraysCount=arrays.count; 无符号长结果大小=1; 用于(NSArray*阵列中的阵列) resultSize*=array.count; NSMutableArray*产品=[NSMutableArray阵列容量:resultSize]; for(无符号长i=0;i您是否考虑过使用数组的枚举器对象?太本地化了吗?我相信以后会有人使用它,在知识库中添加Objective-C中的笛卡尔积函数不会有什么坏处……有几个小语法问题,但我使用了它,它工作得非常好。非常感谢,即使一年多以后。