2012-02-09 3 views
2

私は(Delphiで)複数の部分にSTRINGLISTコンテンツを分割しようとしている...
は簡単に聞こえるが、私は愚かなブロックされています:Delphiで1つのStringListを2つの文字列リストに分割する方法は?

は、例えば、STRINGLISTは1001行が含まれていると私はしたいと思いますoをコンテンツを2つのStringListsに分割します。したがって、1つは500行、もう1つは501行になります。
最初に501と2番目の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を。私はこれを最初に書きましたが、挿入するたびに2番目の文字列リストに置かれた文字列のすべてを移動する必要があります。私は2つの別々のループを使用することによってそれを必要としないように私のものを変更しました。元の文字列リストのサイズによっては、おそらくほぼ同じパフォーマンスになるでしょう。大きなリストでは、私は少しずつ速いと思います。なぜなら、毎回割り当てを変更したり移動したりする必要がないからです。 :) –

+0

ありがとうございました!私はすぐに試してみましょう:) – Beny

+0

ちょうど完璧!今私は3つの部分に分割しようとします。 – Beny

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

+0

+1これはKobikのO(N^2)ではなくO(N)です。 1つの小さな不意打ち。そのコードはループ境界のためのいくつかの説明的な局所変数でより読みやすくなるということです。そして、それはまた、2つのループが同じ範囲をカバーしていることを明確にするでしょう。 –

+1

@David、良い点。それはそれをより明確にするでしょう。完了しました。 –

関連する問題