कन्वर्ट NSArray को NSString में ऑब्जेक्टिव-सी


185

मैं सोच रहा हूँ कि कैसे उद्देश्य-सी में एक NSArray [@"Apple", @"Pear ", 323, @"Orange"] को एक स्ट्रिंग में परिवर्तित किया जाए ।



47
@beryllium यह प्रश्न मेरे प्रश्न के दो साल बाद पूछा गया था ।
अलेक्सयॉर्क

जवाबों:


534
NSString * result = [[array valueForKey:@"description"] componentsJoinedByString:@""];

1
क्या यह कॉलिंग [सरणी विवरण] के समान नहीं होगी?
टेकजेन

9
@TechZen - नहीं, क्योंकि [array description]newlines और बाहरी कोष्ठक सम्मिलित करता है।
डेव डेलॉन्ग

यह चुना हुआ उत्तर होना चाहिए!
पिक्सफ्रीक

56
बस यहाँ सुनिश्चित होना चाहते हैं, लेकिन क्या इसके लिए NSString * myString = [array componentsJoinedByString:@""];एक स्वीकार्य विकल्प है?
मिक मैक्लम

10
@ 0x7fffffff: यह समतुल्य है यदि सरणी में केवल "मूल" प्रकार होते हैं। जटिल प्रकारों के लिए, यह उन्हें कड़े करेगा <ClassName: InstanceAddress>valueForKeyयह प्रत्येक आइटम के लिए निर्दिष्ट संपत्ति को पुनः प्राप्त करता है। इस मामले में, descriptionएक ऐसी NSString *संपत्ति है NSObject, जिसके गेटटर को उसके उपवर्गों द्वारा ओवरराइड किया जा सकता है।
jweyrich

32

descriptionप्रत्येक आइटम पर संदेश को कॉल करते हुए एक दृष्टिकोण सरणी पर चलना होगा :

NSMutableString * result = [[NSMutableString alloc] init];
for (NSObject * obj in array)
{
    [result appendString:[obj description]];
}
NSLog(@"The concatenated string is %@", result);

एक अन्य दृष्टिकोण प्रत्येक आइटम के वर्ग के आधार पर कुछ करना होगा:

NSMutableString * result = [[NSMutableString alloc] init];
for (NSObject * obj in array)
{
    if ([obj isKindOfClass:[NSNumber class]])
    {
        // append something
    }
    else
    {
        [result appendString:[obj description]];
    }
}
NSLog(@"The concatenated string is %@", result);

यदि आप अल्पविराम और अन्य बाहरी जानकारी चाहते हैं, तो आप बस कर सकते हैं:

NSString * result = [array description];

यह पहली बार परिवर्तित करने के लिए और अधिक कुशल तार करने के लिए सभी तत्वों (शायद का उपयोग कर सकते सरणी कई तत्वों है -descriptionकि उसके बाद) और उन्हें concat का उपयोग कर -componentsJoinedByString:के साथ @""पैरामीटर के रूप में।
जॉर्ज शॉर्ली

मैं डेव डेलॉन्ग द्वारा इस पद्धति के साथ जाऊंगा जब तक कि आपका बस डिबगिंग न हो।
20

17

मुझे लगता है कि संजय का जवाब लगभग था लेकिन मैंने इसे इस तरह से इस्तेमाल किया

NSArray *myArray = [[NSArray alloc] initWithObjects:@"Hello",@"World", nil];
NSString *greeting = [myArray componentsJoinedByString:@" "];
NSLog(@"%@",greeting);

आउटपुट:

2015-01-25 08:47:14.830 StringTest[11639:394302] Hello World

जैसा कि संजय ने संकेत दिया था - मैंने विधि घटकों का उपयोग किया । जॉइंटेडबायरिंग NSArray से जो जुड़ता है और आपको वापस देता है NSString

BTW NSString में रिवर्स मेथड कंपोनेंटसैपरेटेड बायस्ट्रीमिंग है जो स्प्लिटिंग करता है और आपको NSArray वापस देता है ।


10

मुझे हाल ही में ऑब्जेक्टिव-सी स्ट्रिंग्स पर एक बहुत अच्छा ट्यूटोरियल मिला:

http://ios-blog.co.uk/tutorials/objective-c-strings-a-guide-for-beginners/

और मैंने सोचा कि यह ब्याज की हो सकती है:

यदि आप स्ट्रिंग को एक सरणी में विभाजित करना चाहते हैं, तो इसे प्राप्त करने के लिए घटकों का उपयोग करें।

NSString *yourString = @"This is a test string";
    NSArray *yourWords = [myString componentsSeparatedByString:@" "];

    // yourWords is now: [@"This", @"is", @"a", @"test", @"string"]

यदि आपको कई अलग-अलग वर्णों के एक सेट पर विभाजित करने की आवश्यकता है, तो NSString के घटकों का उपयोग करें

NSString *yourString = @"Foo-bar/iOS-Blog";
NSArray *yourWords = [myString componentsSeparatedByCharactersInSet:
                  [NSCharacterSet characterSetWithCharactersInString:@"-/"]
                ];

// yourWords is now: [@"Foo", @"bar", @"iOS", @"Blog"]

ध्यान दें कि विभाजक स्ट्रिंग रिक्त नहीं हो सकता है। यदि आपको अपने व्यक्तिगत पात्रों में एक स्ट्रिंग को अलग करने की आवश्यकता है, तो बस स्ट्रिंग की लंबाई के माध्यम से लूप करें और प्रत्येक चार को एक नए स्ट्रिंग में परिवर्तित करें:

NSMutableArray *characters = [[NSMutableArray alloc] initWithCapacity:[myString length]];
for (int i=0; i < [myString length]; i++) {
    NSString *ichar  = [NSString stringWithFormat:@"%c", [myString characterAtIndex:i]];
    [characters addObject:ichar];
}

9
NSString * str = [componentsJoinedByString:@""];

और आपके पास dic या एक से अधिक सरणी है, तो उसका उपयोग किया जाता है

NSString * result = [[array valueForKey:@"description"] componentsJoinedByString:@""];   

1
NSArray *array = [NSArray arrayWithObjects:@"One",@"Two",@"Three", nil];
NSString *stringFromArray = [array componentsJoinedByString:@" "];

पहली पंक्ति वस्तुओं के साथ एक सरणी को इनिशियलाइज़ करती है। दूसरी पंक्ति उस सरणी के सभी तत्वों को "" के अंदर स्ट्रिंग जोड़कर जोड़ देती है और एक स्ट्रिंग लौटा देती है।


हालांकि यह कोड प्रश्न का उत्तर दे सकता है, क्यों और / या इस कोड के उत्तर के बारे में अतिरिक्त संदर्भ प्रदान करने से प्रश्न इसके दीर्घकालिक मूल्य में सुधार करता है।
डोनाल्ड डक

आपकी सलाह के लिए धन्यवाद, ईमानदारी से!
अब्दुलअज़ीज़ रुस्तम ओगली

1

उद्देश्य सी समाधान

NSArray * array = @[@"1", @"2", @"3"];
NSString * stringFromArray = [[array valueForKey:@"description"] componentsJoinedByString:@"-"];   // "1-2-3"

जो एक समाधान की तलाश में हैं Swift

यदि सरणी में स्ट्रिंग्स हैं, तो आप स्ट्रिंग की ज्वाइन विधि का उपयोग कर सकते हैं:

var array = ["1", "2", "3"]

let stringFromArray = "-".join(array) // "1-2-3"

स्विफ्ट 2 में:

var array = ["1", "2", "3"]

let stringFromArray = array.joinWithSeparator("-") // "1-2-3"

स्विफ्ट 3 और 4 में

var array = ["1", "2", "3"]

let stringFromArray = array.joined(separator: "-") // "1-2-3"

-1

मेरे जानने का तरीका आसान है।

var NSArray_variable = NSArray_Object[n]
var stringVarible = NSArray_variable as String

nयह स्विफ्ट भाषा में सरणी में आंतरिक स्थिति है। यह में काम कर सकते हैं उद्देश्य सी


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.