में एनएसएसटींग में शफलिंग लेटर्स मैंने इस फ़ंक्शन को लिखा है जो NSString
की सामग्री को shuffles करता है, और ऐसा लगता है, लेकिन हर अब और फिर यह दुर्घटनाग्रस्त हो जाता है। यह एक चौराहे का तरीका हो सकता है, लेकिन मैंने अक्षरों को सरणी में रखा है, तत्वों को सरणी में यादृच्छिक रूप से स्वैप करें, और फिर सरणी को स्ट्रिंग में वापस चालू करें।उद्देश्य-सी
मुझे यकीन नहीं है कि मैं क्या कर रहा हूं वह असुरक्षित है जो इसे दुर्घटनाग्रस्त कर देता है। मैंने सोचा कि यह संभवतः है कि मैं finalLettersString = result
सेट कर रहा हूं, लेकिन मैंने finalLettersString = [NSString stringWithString:result]
भी कोशिश की और यह भी क्रैश हो गया। कारण मैं उलझन में हूं क्योंकि यह हर बार दुर्घटनाग्रस्त नहीं होता है। मैं सिर्फ शफल बटन दबाता रहता हूं, और कभी-कभी यह दुर्घटनाग्रस्त हो जाता है। मुझे किसी भी जगह दिखानी चाहिए?
/* This function shuffles the letters in the string finalLettersString */
-(IBAction)shuffleLetters:(id)sender{
int length = [finalLettersString length];
NSMutableArray * letters = [NSMutableArray arrayWithCapacity:length];
NSLog(@"final letters: %@", finalLettersString);
for(int i = 0; i < length; i++){
char ch = [finalLettersString characterAtIndex:i];
NSLog(@"%c", ch);
NSString * cur = [NSString stringWithFormat:@"%c", ch];
[letters insertObject:cur atIndex:i];
}
NSLog(@"LETTERS:: %@", letters);
for(int i = length - 1; i >= 0; i--){
int j = arc4random() % (i + 1);
//NSLog(@"%d %d", i, j);
//swap at positions i and j
NSString * str_i = [letters objectAtIndex:i];
[letters replaceObjectAtIndex:i withObject:[letters objectAtIndex:j]];
[letters replaceObjectAtIndex:j withObject:str_i];
}
NSLog(@"NEW SHUFFLED LETTERS %@", letters);
NSString * result = @"";
for(int i = 0; i < length; i++){
result = [result stringByAppendingString:[letters objectAtIndex:i]];
}
NSLog(@"Final string: %@", result);
finalLettersString = result;
finalLetters.text = finalLettersString;
}
धन्यवाद! निश्चित रूप से एक बेहतर समाधान। वास्तव में एक समस्या यह थी कि आप NSUIntegers का उपयोग नहीं कर सकते हैं, क्योंकि 0 पर असीमित होने के बाद 0 पर वास्तव में बड़ी संख्या होती है और -1 नहीं होती है। मैं इसे स्याही और बनाए रखने का उपयोग करने के लिए मिल गया। इस स्थिति में, क्या आपको लगता है कि इसे बनाए रखने या स्पष्ट रूप से आवंटित करना बेहतर है? – jkeesh
@jkeesh: हस्ताक्षरित पूर्णांक के बारे में अच्छा बिंदु। स्पष्ट रूप से आवंटित करने के संबंध में, यह लक्ष्य मंच पर निर्भर करता है। यदि आप आईफोन को लक्षित कर रहे हैं, तो कुछ लोग ऑटोरेलीज पूल से बचने के लिए कहते हैं, जब आप सुंदर तरीके से ऐसा कर सकते हैं, लेकिन मैक ओएस एक्स (यानी आईफोन की तुलना में अधिक मेमोरी वाले सिस्टम) के लिए यह कोई ध्यान देने योग्य अंतर नहीं देगा। निजी तौर पर, मैं हमेशा 'रखरखाव' के साथ 'ऑटोरेलीज' का मुकाबला करने के बजाय स्पष्ट रूप से आवंटित करता हूं, लेकिन परिणाम वही तरीका है। – dreamlax
इस दिन और अंतर्राष्ट्रीयकरण की उम्र में, आप यह नहीं मान सकते कि एक यूनिकार नक्शा एक चरित्र में है। – JeremyP