Objective-C NSArray NSString dönüştürmek


Yanıtlar:


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

1
Bu, [dizi açıklaması] işlevini çağırmakla aynı şeyi gerçekleştiremez mi?
TechZen

10
@TechZen - hayır, çünkü [array description]yeni satırlar ve dış parantezler ekler.
Dave DeLong

Seçilen cevap bu olmalı!
pixelfreak

56
Sadece burada emin olmak istiyorum, ama bunun NSString * myString = [array componentsJoinedByString:@""];için kabul edilebilir bir yedek midir?
Mick MacCallum

10
@ 0x7fffffff: Dizide yalnızca "temel" türler varsa eşdeğerdir. Karmaşık türler için bunları dizgi haline getirecektir <ClassName: InstanceAddress>. valueForKeyHer öğe için belirli özelliğini almaya yapar. Bu durumda, alıcısı alt sınıfları tarafından geçersiz kılınabilen descriptionbir NSString *özelliktir NSObject.
jweyrich

32

Bir yaklaşım, dizi üzerinde yineleme yapmak descriptionve her öğedeki mesajı çağırmak olacaktır :

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

Başka bir yaklaşım, her öğenin sınıfına dayalı bir şey yapmak olacaktır:

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

Virgül ve diğer yabancı bilgileri istiyorsanız, şunları yapabilirsiniz:

NSString * result = [array description];

Dizinin çok sayıda öğesi varsa, önce tüm öğeleri dizelere dönüştürmek (muhtemelen kullanarak -description) ve parametre olarak -componentsJoinedByString:ile birlikte kullandıktan sonra bunları birleştirmek daha verimli olabilir @"".
Georg Schölly

Ben sadece hata ayıklama sürece Dave Delong tarafından biri üzerinde bu yöntemle giderdim.
TechZen

17

Sanjay'in cevabı neredeyse oradaydı ama ben bu şekilde kullandım

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

Çıktı :

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

Sanjay'in ima ettiği gibi - NSArray'den katılan ve size NSString'i veren yöntem bileşenlerini kullandımJoinedByString

BTW NSString , bölme işlemini yapan ve size NSArray'i geri veren ters yöntem bileşenlerine sahiptir .


10

Son zamanlarda Objective-C Dizeleri hakkında gerçekten iyi bir öğretici buldum:

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

Bunun ilginizi çekebileceğini düşündüm:

Dizeyi bir diziye bölmek istiyorsanız, bunu başarmak için componentsSeparatedByString adlı bir yöntem kullanın:

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

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

birkaç farklı karakter kümesine bölmeniz gerekirse, NSString'in bileşenlerini kullanınSeparatedByCharactersInSet:

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

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

Ancak ayırıcı dizenin boş olamayacağını unutmayın. Bir dizeyi kendi karakterlerine ayırmanız gerekiyorsa, dizenin uzunluğu boyunca döngü yapın ve her karakteri yeni bir dizeye dönüştürün:

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:@""];

ve dic ya da birden fazla dizi var sonra feryat kullanılan

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

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

İlk satır, nesneleri içeren bir dizi başlatır. İkinci satır, "" içine dize ekleyerek dizinin tüm öğelerini birleştirir ve bir dize döndürür.


Bu kod soruyu cevaplayabilirken, bu kodun soruyu neden ve / veya nasıl cevapladığı konusunda ek bağlam sağlamak uzun vadeli değerini arttırır.
Donald Duck

Tavsiyeniz için teşekkürler, içtenlikle!
AbdulAziz Rustam Ogli

1

Hedef C Çözümü

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

Bir çözüm arayanlar Swift

Dizi dizeler içeriyorsa, String'in join yöntemini kullanabilirsiniz:

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

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

Swift 2'de:

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

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

Swift 3 ve 4'te

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

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

-1

Bildiğim kadar kolay.

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

nBu SWIFT Dili dizisindeki iç konumdur. Hedef C'de işe yarayabilir


-1

Swift 3.0 çözümü:

let string = array.joined(separator: " ")
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.