2012-02-09 76 views
2

我试图拆分StringList的内容分成多个部分(在Delphi)...
听起来很简单,但我愣神堵塞:○如何在Delphi中将一个StringList分成两个字符串列表?

例如,包含StringList的1001线,我想将内容分割成2个StringLists。所以,一个将有500行,另一个将有501行。
无论第一个有501还是第二个500,反之亦然。

如果有人能把我推上正确的道路......
在此先感谢!

天语

回答

5

你可以做这样的事情:

for I := SL1.Count - 1 downto (SL1.Count div 2) do 
begin 
    SL2.Insert(0, SL1[I]); 
    SL1.Delete(I); 
end; 
+0

+1。我首先写了这个,但是它要求每次插入时都要将所有放入第二个字符串列表的字符串移动。我改变了我不要求通过使用两个单独的循环。根据原始字符串列表的大小,它们大概是相同的性能 - 在更大的列表中,我认为我的速度稍快,因为它不必每次重新分配和移动,而只是分配。 :) – 2012-02-09 13:49:08

+0

非常感谢!我会尽快试一试:) – Beny 2012-02-09 14:00:07

+0

完美!现在我会尝试分成三部分。 – Beny 2012-02-09 14:30:29

3

你可以做手工很轻松地:

var 
    i: Integer; 
    MidIndex, HighIndex: Integer; 
begin 
    MidIndex := SLOne.Count div 2; // Center of first list's items 
    HighIndex := SLOne.Count - 1; // End of first list 

    // Copy from center to end of first list, keeping order 
    // of items intact 
    for i := MidIndex to HighIndex do 
    SLTwo.Append(SLOne[i]); 

    // Go back and remove the ones you just put into the second 
    // list. Go backward to prevent going past the end. 
    for i := HighIndex downto MidIndex do 
    SLOne.Delete(i); 
end; 
+0

谢谢你的帮助:) – Beny 2012-02-09 14:02:13

+0

+1这是O(N)而不是Kobik的O(N^2)。一个小问题。是代码将更易于阅读与循环边界的一些解释性局部变量。而且这也会使两个回路覆盖的范围更加清晰。 – 2012-02-09 16:28:40

+1

@大卫,好点。这将使它更清楚。完成。 – 2012-02-09 16:33:12

相关问题