0

我一直试图解决一个相对简单的问题,但是做 for 循环和大量比较确实让我头晕目眩。

这就是问题所在:假设我有一个字符串数组。每个字符串都是一个单词,从一个或几个句子中解析出来。理想情况下,我想创建一个新数组,根据两个事实将这些单个字符串连接成多单词字符串:每行单词和行数。

举个例子,假设我有 4 个单词,我将每行的单词设置为 2,将行数设置为 2,然后它会像这样显示它们:
Word1 Word2
Word3 Word4

当然,在某些特殊情况下,只有 3 个单词,这会将第一行的前 2 个单词和第二行的最后 1 个单词分开。


你们将如何处理这种类型的问题,肯定有一种更简单的方法可以做到这一点,而不是只使用令人麻木的嵌套循环和 if/else 语句?

4

1 回答 1

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
    )
)
于 2013-11-12T16:44:30.810 回答