Это должно быть легко, но мне сложно найти самое легкое решение.Создайте NSString, повторив другую строку определенное количество раз
Мне нужен NSString
, который равен другой строке, объединенной с собой определенное количество раз.
Для лучшего объяснения, рассмотрим следующий пример Python:
>> original = "abc"
"abc"
>> times = 2
2
>> result = original * times
"abcabc"
Любые намеки?
EDIT:
Я собирался опубликовать решение, похожее на один по Mike McMaster's answer, посмотрев на эту реализацию из OmniFrameworks:
// returns a string consisting of 'aLenght' spaces
+ (NSString *)spacesOfLength:(unsigned int)aLength;
{
static NSMutableString *spaces = nil;
static NSLock *spacesLock;
static unsigned int spacesLength;
if (!spaces) {
spaces = [@" " mutableCopy];
spacesLength = [spaces length];
spacesLock = [[NSLock alloc] init];
}
if (spacesLength < aLength) {
[spacesLock lock];
while (spacesLength < aLength) {
[spaces appendString:spaces];
spacesLength += spacesLength;
}
[spacesLock unlock];
}
return [spaces substringToIndex:aLength];
}
Код воспроизведенной из файла:
Frameworks/OmniFoundation/OpenStepExtensions.subproj/NSString-OFExtensions.m
в рамке OpenExtensions от Omni Frameworks от The Omni Group.
Я пытался придумать что-то более простое, но я думаю, что это самый короткий путь. – 2008-11-04 05:21:18
Я сделал это немного более эффективным с момента принятия, указав время сначала и имея емкость = [оригинальная длина] * раз – 2008-11-04 05:21:54
Просто для полноты, если по какой-то причине вы хотите использовать большие числа, вы можете улучшить это, из двух конкатенаций (например, foo * 10 = foo * 2 + foo * 8; foo * 8 = foo * 4 + foo * 4; foo * 4 = foo * 2 + foo * 2 -> 3 concat operations вместо 9) , – 2008-11-04 09:14:56