如何从 NSArray 将字符串配对在一起?[复制]

How to pair strings together from NSArray? [duplicate]

提问人:CokePokes 提问时间:3/25/2021 更新时间:3/26/2021 访问量:118

问:

我有一个看起来像这样的 NSArray:

NSArray *array = {@"1.100.2", @"23465343", @"1.100.1", @"46535334", @"1.0.03", @"24353454" ...};

我需要将每 2 个字符串配对到数组中的数组中,如下所示:

NSArray *pairedArray = {{@"1.100.2", @"23465343"}, {@"1.100.1", @"46535334"}, {@"1.0.03", @"24353454"}, ...};

数组是动态的。

我想有一个语句我可以使用,但记不住了。类似的东西forfor (uint i = 0; i < len - 1; i += 2)

任何帮助将不胜感激。

Objective-C for 循环 nsarray

评论

0赞 matt 3/26/2021
另请参阅 stackoverflow.com/questions/26395766/...

答:

1赞 skaak 3/26/2021 #1

这是通过使用数组的迭代器并大量使用 .arrayWithCapacity

        NSArray *array = @[ @"1.100.2", @"23465343", @"1.100.1", @"46535334", @"1.0.03", @"24353454" ];
        NSUInteger countPerPair = 2;
        NSMutableArray * pair = [NSMutableArray arrayWithCapacity:countPerPair];
        NSMutableArray * pairedArray = [NSMutableArray arrayWithCapacity:( array.count + countPerPair / 2 ) / countPerPair];

        for ( NSObject * i in array )
        {
            if ( pair.count == countPerPair )
            {
                [pairedArray addObject:pair];
                pair = [NSMutableArray arrayWithCapacity:countPerPair];
            }

            [pair addObject:i];
        }

        if ( pair.count )
        {
            [pairedArray addObject:pair];
        }

评论

0赞 CokePokes 3/26/2021
虽然这确实有效,但我看到一些对被交换了。例如:NSArray *pairedArray = {{@“1.100.2”, @“23465343”}, {@“46535334”, @“1.100.1”}, {@“1.0.03”, @“24353454”}, ...};编辑:看起来他们每隔一对就交换一次顺序。
0赞 skaak 3/26/2021
@CokePokes哎呀!该代码中存在一个严重的错误。我已经修好了,现在应该更好了。
1赞 CokePokes 3/27/2021
是的,有效!谢谢伙计。标记为已解决!
0赞 bbum 3/27/2021
并不是说性能对于这么小的数据集真的很重要,但我倾向于避免使用可变数组。一次性创建所有子阵列作为 NSArray 实例既速度稍快,也更安全。如果数据模型是不可变的,则存储对象应该是可变的。
0赞 skaak 3/27/2021
@bbum你的意思是创建像这样的东西对?我确实考虑过这一点,但是您必须与 2 配对 - 我专门将我的设置为可变的,这意味着您需要可变的。不知道你的意思,但很好奇?你能解释一下吗?[NSArray arrayWithObjects:a,b,nil]Creating the sub-arrays all at once as NSArray instances