Zastanawiam się, jak przekonwertować NSArray [@"Apple", @"Pear ", 323, @"Orange"]
na ciąg znaków w Objective-C .
Zastanawiam się, jak przekonwertować NSArray [@"Apple", @"Pear ", 323, @"Orange"]
na ciąg znaków w Objective-C .
Odpowiedzi:
NSString * result = [[array valueForKey:@"description"] componentsJoinedByString:@""];
[array description]
wstawia znaki nowej linii i zewnętrzne nawiasy.
NSString * myString = [array componentsJoinedByString:@""];
to akceptowalnym substytutem?
<ClassName: InstanceAddress>
. valueForKey
Czyni go odzyskać określonej właściwości dla każdego elementu. W tym przypadku description
jest to NSString *
właściwość NSObject
, której getter można zastąpić podklasami.
Jednym podejściem byłoby iterowanie po tablicy, wywoływanie description
komunikatu na każdym elemencie:
NSMutableString * result = [[NSMutableString alloc] init];
for (NSObject * obj in array)
{
[result appendString:[obj description]];
}
NSLog(@"The concatenated string is %@", result);
Innym podejściem byłoby zrobienie czegoś w oparciu o klasę każdego przedmiotu:
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);
Jeśli chcesz przecinki i inne obce informacje, możesz po prostu:
NSString * result = [array description];
-description
) i concat je po to korzystając -componentsJoinedByString:
z @""
jako parametr.
Myślę, że odpowiedź Sanjaya była już prawie na miejscu, ale użyłem jej w ten sposób
NSArray *myArray = [[NSArray alloc] initWithObjects:@"Hello",@"World", nil];
NSString *greeting = [myArray componentsJoinedByString:@" "];
NSLog(@"%@",greeting);
Wynik :
2015-01-25 08:47:14.830 StringTest[11639:394302] Hello World
Jak wskazał Sanjay - użyłem składników metodyJoinedByString z NSArray, która łączy się i zwraca NSString
BTW NSString ma metodę odwróconych składnikówSeparatedByString, która dokonuje podziału i zwraca NSArray .
Niedawno znalazłem naprawdę dobry samouczek na temat ciągów Objective-C:
http://ios-blog.co.uk/tutorials/objective-c-strings-a-guide-for-beginners/
Pomyślałem, że może to być interesujące:
Jeśli chcesz podzielić ciąg na tablicę, użyj metody o nazwie componentsSeparatedByString, aby to osiągnąć:
NSString *yourString = @"This is a test string";
NSArray *yourWords = [myString componentsSeparatedByString:@" "];
// yourWords is now: [@"This", @"is", @"a", @"test", @"string"]
jeśli chcesz podzielić na zestaw kilku różnych znaków, użyj składników NSString'sSeparatedByCharactersInSet:
NSString *yourString = @"Foo-bar/iOS-Blog";
NSArray *yourWords = [myString componentsSeparatedByCharactersInSet:
[NSCharacterSet characterSetWithCharactersInString:@"-/"]
];
// yourWords is now: [@"Foo", @"bar", @"iOS", @"Blog"]
Należy jednak pamiętać, że ciąg separatora nie może być pusty. Jeśli chcesz oddzielić ciąg znaków do jego poszczególnych znaków, po prostu zapętl długość łańcucha i przekonwertuj każdy znak na nowy ciąg znaków:
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];
}
NSString * str = [componentsJoinedByString:@""];
i masz tablicę dic lub wiele, a następnie użyłeś poniżej
NSString * result = [[array valueForKey:@"description"] componentsJoinedByString:@""];
NSArray *array = [NSArray arrayWithObjects:@"One",@"Two",@"Three", nil];
NSString *stringFromArray = [array componentsJoinedByString:@" "];
Pierwszy wiersz inicjuje tablicę z obiektami. Drugi wiersz łączy wszystkie elementy tej tablicy, dodając ciąg znaków wewnątrz „” i zwraca ciąg znaków.
Cel C Rozwiązanie
NSArray * array = @[@"1", @"2", @"3"];
NSString * stringFromArray = [[array valueForKey:@"description"] componentsJoinedByString:@"-"]; // "1-2-3"
Ci, którzy szukają rozwiązania w Swift
Jeśli tablica zawiera ciągi, możesz użyć metody łączenia ciągu:
var array = ["1", "2", "3"]
let stringFromArray = "-".join(array) // "1-2-3"
W Swift 2:
var array = ["1", "2", "3"]
let stringFromArray = array.joinWithSeparator("-") // "1-2-3"
W Swift 3 i 4
var array = ["1", "2", "3"]
let stringFromArray = array.joined(separator: "-") // "1-2-3"