私は配列を持っています:
arr[0]="a"
arr[1]="b"
arr[2]="a"
removeのみarr[0]
、およびkeeparr[1]
およびarr[2]
にしたい。
使用していたもの:
arr= arr.Where(w => w != arr[0]).ToArray();
arr[0]
とarr[2]
は同じ値( "a")であるため、取得する結果はarr[1]
のみです。
arr[1]
とarr[2]
の両方を返し、arr[0]
のみを削除するにはどうすればよいですか?
Skip
を使用して簡単に実行できます:
arr = arr.Skip(1).ToArray();
これにより、他の回答のように新しい要素を持つ別の配列が作成されます。配列から要素を削除したり要素を追加したりできないためです。配列のサイズは固定されています。
これを試すことができます:
arr = arr.ToList().RemoveAt(0).ToArray();
すでに持っている配列に基づいてリストを作成し、0の位置にある要素を削除して、結果を配列にキャストします。
またはこれ:
arr = arr.Where((item, index)=>index!=0).ToArray();
Where
のオーバーロードバージョンを使用します。これは、アイテムのインデックスも引数として受け取ります。ご覧ください こちら 。
更新
D Stanley が指摘したように、上記よりもエレガントな別の方法は、Skip
メソッドを使用することです。
arr = arr.Skip(1).ToArray();
方法について:
if (arr.Length > 0)
{
arr = arr.ToList().RemoveAt(0).ToArray();
}
return arr;
Enumerable.Where :-の2番目のオーバーロードを使用します
arr = arr.Where((v,i) => i != 0).ToArray();