2011-11-25 10 views
6

के रूप में एक मेरे सवाल here अप करने के लिए का पालन करें, मैं ऑब्जेक्टिव-सी में निम्नलिखित पीएचपी समारोह है, जो एक कार्तीय उत्पाद उत्पन्न होगा लागू करने के लिए कोशिश कर रहा हूँ:मैं कार्टियर उत्पाद फ़ंक्शन के इस उद्देश्य-सी कार्यान्वयन को कैसे पूरा कर सकता हूं?

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; 
} 

यहाँ मैं अब तक है:

-(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; 

} 

मैं जब PHP के next, current और reset कार्यों के बराबर कोड करने के लिए कोशिश कर खो रहा हूँ, के रूप में मैं नहीं पता सरणी के लिए आंतरिक सूचक संदर्भ के लिए कैसे।

मैं कोड के अंतिम ब्लॉक को कैसे कार्यान्वित कर सकता हूं और समकक्ष कार्य कैसे प्राप्त कर सकता हूं?

+1

आप सरणी के प्रगणक वस्तु उपयोग करने पर विचार किया? –

+0

बहुत स्थानीयकृत? मुझे यकीन है कि कोई इसे सड़क के नीचे उपयोग कर सकता है, और उद्देश्य-सी में एक कार्टेसियन उत्पाद फ़ंक्शन को ज्ञानबेस में जोड़ना चोट नहीं पहुंचाएगा ... – barfoon

उत्तर

8
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; 
} 
+0

अद्भुत। धन्यवाद। – barfoon

+0

छोटे वाक्यविन्यास मुद्दों के जोड़े लेकिन मैंने इसका इस्तेमाल किया और यह पूरी तरह से काम करता है। एक साल बाद भी बहुत धन्यवाद। – jwj

-2

एनएसएआरआरए एनएसएमयूटेबलएरे में अगले वर्तमान रीसेट फ़ंक्शन नहीं हैं। मुझे लगता है कि आप एक वर्ग इस तरह के समारोह

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

-(id)current; 
-(id)next; 
-(id)reset; 
@end 

3 समारोह सूचकांक को संशोधित करेगा लागू करने के लिए लिख सकते हैं,