1

ArrayHold実行時にデータが取り込まれる、呼び出される大きな 1 次元配列があります。ループを実行して配列をスキャンし、いくつかのパラメーターに基づいて削除する必要がある要素を見つけます。これはすべてうまく機能し、今では 2 つの配列が残っています。元のものと、削除する要素の場所を含む新しいもの。

元の配列:

("A")("B")("C")("D")("E")("F")("G")("H")

削除する必要がある要素のインデックス/数を含む 2 番目の配列:

("0")("3")("5")("7")

最終結果は、できれば新しい配列ではなく、元の配列の「ReDim」にする必要があります。

("B")("C")("E")("G")

これを達成する最も簡単な方法は何ですか?ループを実行して、削除する必要があるすべての要素を作成できます"0"""? すべての空白または空の要素を削除/削除することで、サイズ変更と配列を簡単に行う方法はありますか?

事前にどうもありがとう.. :)

4

1 に答える 1

1

これにはLINQを使用することをお勧めします。そうすれば、コードがより読みやすく、保守しやすくなります。

最初の配列をどのようにフィルタリングしたかを示していないため、この例では、「A」、「D」、「F」、「H」(大文字と小文字を区別) をすべて削除するとします。

Dim original = {"A", "B", "C", "D", "E", "F", "G", "H"}
    ' remove A,D,F,H
Dim result = (From str In original
              Where Not {"A", "D", "F", "H"}.Contains(str)).ToArray()

結果:

    (0) "B" String
    (1) "C" String
    (2) "E" String
    (3) "G" String

最終結果は、できれば新しい配列ではなく、元の配列の "ReDim" にする必要があります: ("B")("C")("E")("G")

もちろん、上記は新しい配列を作成しますが、新しい配列Redim作成します。

編集int[]:最初の配列から削除したいすべてのインデックスがあると仮定して、インデックスに基づいて要素を削除する例を次に示します。

Dim deleteIndices = {0, 3, 5, 7}
' remove elements with index 0,3,5,7
Dim result = original.
          Where(Function(str, index) Not deleteIndices.Contains(index)).
          ToArray()
于 2012-06-02T11:41:09.013 に答える