0

私は比較的単純な問題に頭を悩ませようとしてきましたが、for ループと大量の比較を行うと、本当に頭が回転します。

問題は次のとおりです。文字列の配列があるとしましょう。各文字列は、1 つまたは複数の文から解析された 1 つの単語です。理想的には、1 行あたりの単語数と行数という 2 つの事実に基づいて、これらの 1 つの文字列を複数単語の文字列に結合する新しい配列を作成したいと考えています。

例として、4 つの単語があり、1 行あたりの単語数を 2 に設定し、行数を 2 に設定すると、次のように表示されます:
Word1
Word2 Word3 Word4

確かに、最初の行の最初の 2 単語と 2 行目の最後の 1 単語を分割する 3 つの単語しかない特殊なケースがあります。


皆さんなら、この種の問題にどのように取り組みますか?ネストされたループと if/else 文を麻痺させるだけでなく、もっと簡単な方法がありますか?

4

1 に答える 1

2

NSMutableArray以下は、指定した文字列の数を含む配列のa を出力します。したがって、文字列の数が 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
    ),
        (
    )
)

numLines2 に変更して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 に答える