我一直试图绕过一个相对简单的问题,但是做一些循环和大量的比较真的让我头晕目眩。
这是问题所在: 假设我有一个字符串数组。每个字符串都是一个单词,从一个或多个句子中解析出来。理想情况下,我想创建一个新的数组,根据两个事实将这些单个字符串连接成多字符串:每行字数和行数。
作为一个例子,假设我有4个单词,我将每行的单词设置为2,将行数设置为2,然后它将显示如下:
当然,有些特殊情况只有3个单词,它们会分割第一行的前两个单词和第二行的最后一个单词。
你们如何处理这类问题,肯定有一种更简单的方法,而不是只使用心灵麻木的嵌套循环和if / else句子?
答案 0 :(得分:2)
以下内容将输出NSMutableArray
个数组,每个数组都包含您提供的字符串数。因此,如果字符串的数量是3,那么每个数组将有3个字符串,除非没有字符串,在这种情况下,它将添加尽可能多的字符串。
int numLines = 4;
int numWordsPerLine = 3;
NSArray *strings = @[@"String1", @"String2", @"String3", @"String4", @"String5", @"String6", @"String7", @"String8"];
NSMutableArray *matrixArray = [NSMutableArray arrayWithCapacity:numLines];
NSEnumerator *enuma = [strings objectEnumerator];
int linesCount = 0;
while (linesCount < numLines) {
[matrixArray addObject:[NSMutableArray array]];
for (int i = 0; i < numWordsPerLine; i++) {
id nextObject = [enuma nextObject];
if (nextObject) {
[[matrixArray objectAtIndex:linesCount] addObject:nextObject];
}
}
linesCount++;
}
NSLog(@"Matrix %@", matrixArray);
那会输出:
2013-11-12 11:42:06.940 WordPuzzle[1900:a0b] Matrix (
(
String1,
String2,
String3
),
(
String4,
String5,
String6
),
(
String7,
String8
),
(
)
)
如果您将numLines
更改为2,然后将numWordsPerLine
更改为4,那么您将获得:
2013-11-12 11:43:39.014 WordPuzzle[1936:a0b] Matrix (
(
String1,
String2,
String3,
String4
),
(
String5,
String6,
String7,
String8
)
)