タイプAのオブジェクトの配列があります。 A[] ar
です。 整数リスト: List<int> indexes
。LINQを使用して配列からオブジェクトを削除する方法
ar
のインデックスを持つすべてのオブジェクトを、indexes
のLINQを使用して削除するにはどうすればよいですか? I.インデックスがindexes
であるオブジェクトがない新しい(より小さい)配列が必要です。 LINQの使用。
残っているオブジェクトの順序は削除前と同じですか?
ありがとうございます。
タイプAのオブジェクトの配列があります。 A[] ar
です。 整数リスト: List<int> indexes
。LINQを使用して配列からオブジェクトを削除する方法
ar
のインデックスを持つすべてのオブジェクトを、indexes
のLINQを使用して削除するにはどうすればよいですか? I.インデックスがindexes
であるオブジェクトがない新しい(より小さい)配列が必要です。 LINQの使用。
残っているオブジェクトの順序は削除前と同じですか?
ありがとうございます。
配列に含まれる要素のみを変更することはできません。述語の現在のインデックスを渡しWhere
の過負荷であり(この場合に使用されます)オブジェクトへのLINQで
myArray = myArray.Where(x => x.KeepThisElement).ToArray();
:
しかし、あなたは簡単に交換用の配列を作成することができます。
myArray = myArray.Where((x, idx) => !indexes.Conatins(idx)).ToArray();
(それは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>
を使用することを検討し
@openwixありがとう..非Linqバージョンは、実際には非常に簡単です。しかし、私はLINQクエリを使用して同じことをしたいと思います。それが可能であれば、もちろんです。 – Ilan
結果として新しい配列を取得しますか?配列は不変です。オブジェクトへの参照の代わりにNULLを設定することしかできません。 – opewix
@opewix nullを設定するだけでは十分ではありません。インデックスが「インデックス」であるオブジェクトがない新しい(より小さい)配列が必要です。 – Ilan