2017-07-16 13 views
0

タイプAのオブジェクトの配列があります。 A[] arです。 整数リスト: List<int> indexesLINQを使用して配列からオブジェクトを削除する方法

arのインデックスを持つすべてのオブジェクトを、indexesのLINQを使用して削除するにはどうすればよいですか? I.インデックスがindexesであるオブジェクトがない新しい(より小さい)配列が必要です。 LINQの使用。

残っているオブジェクトの順序は削除前と同じですか?

ありがとうございます。

+1

結果として新しい配列を取得しますか?配列は不変です。オブジェクトへの参照の代わりにNULLを設定することしかできません。 – opewix

+0

@opewix nullを設定するだけでは十分ではありません。インデックスが「インデックス」であるオブジェクトがない新しい(より小さい)配列が必要です。 – Ilan

答えて

1

配列に含まれる要素のみを変更することはできません。述語の現在のインデックスを渡しWhereの過負荷であり(この場合に使用されます)オブジェクトへのLINQで

myArray = myArray.Where(x => x.KeepThisElement).ToArray(); 

しかし、あなたは簡単に交換用の配列を作成することができます。

myArray = myArray.Where((x, idx) => !indexes.Conatins(idx)).ToArray(); 
+0

残りのオブジェクトの順序は、削除前と同じになりますか?ありがとうございました。 – Ilan

+0

@Ilanはい、入力列挙は順番に処理されます。 – Richard

1

(それはLINQではありません)これは奇妙に見えるかもしれないが、それはあなたが欲しいものを行います。

var filtered = new List<A>(); 
for (var i = 0; i < ar.Length; i++) 
{ 
    if (indexes.Contains(i)) 
     continue; 

    filtered.Add(ar[i]]); 
} 

var ar = filtered.ToArray(); 

あなたの整数のリストが非常に大きい場合は、より高いパフォーマンスを得るために、リストの代わりにHashSet<int>を使用することを検討し

+0

@openwixありがとう..非Linqバージョンは、実際には非常に簡単です。しかし、私はLINQクエリを使用して同じことをしたいと思います。それが可能であれば、もちろんです。 – Ilan

関連する問題