Conversão NSArray para NSString em Objective-C

Respostas:

534
NSString * result = [[array valueForKey:@"description"] componentsJoinedByString:@""];
Dave DeLong
fonte
1
Isso não fará o mesmo que chamar [descrição da matriz]?
TechZen
10
@TechZen - não, porque [array description]insere novas linhas e os parênteses externos.
Dave DeLong
Essa deve ser a resposta escolhida!
12119 pix11
56
Só quero ter certeza aqui, mas é NSString * myString = [array componentsJoinedByString:@""];um substituto aceitável para isso?
Mick MacCallum
10
@ 0x7fffffff: É equivalente se a matriz contiver apenas tipos "básicos". Para tipos complexos, eles serão especificados como <ClassName: InstanceAddress>. O valueForKeyfaz recuperar a propriedade especificada para cada item. Nesse caso, descriptioné uma NSString *propriedade de NSObjectcujo getter pode ser substituído por suas subclasses.
precisa saber é o seguinte
32

Uma abordagem seria iterar sobre a matriz, chamando a descriptionmensagem em cada item:

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

Outra abordagem seria fazer algo com base na classe de cada item:

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

Se você deseja vírgulas e outras informações estranhas, basta:

NSString * result = [array description];
Jason
fonte
Se a matriz tem muitos elementos que poderia ser mais eficiente para primeiro converter todos os elementos para strings (provavelmente usando -description) e concat-los depois que o uso -componentsJoinedByString:de @""como o parâmetro.
Georg Schölly 01/12/2009
Eu iria com esse método sobre o de Dave Delong, a menos que você esteja apenas depurando.
TechZen
17

Acho que a resposta de Sanjay estava quase lá, mas eu a usei dessa maneira

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

Resultado :

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

Como Sanjay havia sugerido - usei os componentes do métodoJoinedByString do NSArray que faz junção e devolve o NSString

O NSString possui o método reverso componentsSeparatedByString que faz a divisão e devolve o NSArray .

Pranay
fonte
10

Recentemente, eu encontrei um ótimo tutorial sobre Objective-C Strings:

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

E pensei que isso poderia ser interessante:

Se você deseja dividir a sequência em uma matriz, use um método chamado componentsSeparatedByString para conseguir isso:

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

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

se você precisar dividir um conjunto de vários caracteres diferentes, use os componentes do NSStringSeparatedByCharactersInSet:

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

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

Observe, no entanto, que a sequência separadora não pode ficar em branco. Se você precisar separar uma string em seus caracteres individuais, faça um loop pelo comprimento da string e converta cada caractere em uma nova string:

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];
}
MarkP
fonte
9
NSString * str = [componentsJoinedByString:@""];

e você tem matriz dic ou múltipla e depois usou abaixo

NSString * result = [[array valueForKey:@"description"] componentsJoinedByString:@""];   
Sanjay Kakadiya
fonte
1
NSArray *array = [NSArray arrayWithObjects:@"One",@"Two",@"Three", nil];
NSString *stringFromArray = [array componentsJoinedByString:@" "];

A primeira linha inicializa uma matriz com objetos. A segunda linha une todos os elementos dessa matriz adicionando a string dentro do "" e retorna uma string.

AbdulAziz Rustam Ogli
fonte
Embora esse código possa responder à pergunta, fornecer um contexto adicional a respeito de por que e / ou como esse código responde à pergunta melhora seu valor a longo prazo.
Donald Duck
Obrigado pelo seu conselho, sinceramente!
AbdulAziz Rustam Ogli
1

Solução Objective C

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

Quem procura uma solução em Swift

Se a matriz contiver cadeias, você poderá usar o método de junção da Cadeia:

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

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

No Swift 2:

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

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

Em Swift 3 e 4

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

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

O jeito que eu sei é fácil.

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

né a posição interna na matriz Isso no idioma SWIFT. Pode funcionar no Objetivo C

jasmo2
fonte
-1

Solução Swift 3.0:

let string = array.joined(separator: " ")
AhmedZah
fonte