我试图拆分StringList的内容分成多个部分(在Delphi)...
听起来很简单,但我愣神堵塞:○如何在Delphi中将一个StringList分成两个字符串列表?
例如,包含StringList的1001线,我想将内容分割成2个StringLists。所以,一个将有500行,另一个将有501行。
无论第一个有501还是第二个500,反之亦然。
如果有人能把我推上正确的道路......
在此先感谢!
天语
我试图拆分StringList的内容分成多个部分(在Delphi)...
听起来很简单,但我愣神堵塞:○如何在Delphi中将一个StringList分成两个字符串列表?
例如,包含StringList的1001线,我想将内容分割成2个StringLists。所以,一个将有500行,另一个将有501行。
无论第一个有501还是第二个500,反之亦然。
如果有人能把我推上正确的道路......
在此先感谢!
天语
你可以做这样的事情:
for I := SL1.Count - 1 downto (SL1.Count div 2) do
begin
SL2.Insert(0, SL1[I]);
SL1.Delete(I);
end;
你可以做手工很轻松地:
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;
谢谢你的帮助:) – Beny 2012-02-09 14:02:13
+1这是O(N)而不是Kobik的O(N^2)。一个小问题。是代码将更易于阅读与循环边界的一些解释性局部变量。而且这也会使两个回路覆盖的范围更加清晰。 – 2012-02-09 16:28:40
@大卫,好点。这将使它更清楚。完成。 – 2012-02-09 16:33:12
+1。我首先写了这个,但是它要求每次插入时都要将所有放入第二个字符串列表的字符串移动。我改变了我不要求通过使用两个单独的循环。根据原始字符串列表的大小,它们大概是相同的性能 - 在更大的列表中,我认为我的速度稍快,因为它不必每次重新分配和移动,而只是分配。 :) – 2012-02-09 13:49:08
非常感谢!我会尽快试一试:) – Beny 2012-02-09 14:00:07
完美!现在我会尝试分成三部分。 – Beny 2012-02-09 14:30:29