配列(リスト)から特定の値の要素をすべて削除するには (delete / remove / -
)
2016/12/21
配列(リスト)から値で要素を指定して削除する方法。
関連
Java 2015/04/25
以下のメソッドは要素を1つだけ削除する。要素が見つかって削除した場合は
true
を返し、要素が見つからなかった場合は false
を返す。
Signature:
要素の型が整数の List[Integer]
という型の場合は、オートボクシングを期待して、
remove(3)
のように呼びだしてしまうと、上記メソッドではなく、
remove(int)
という別のメソッドを呼び出してしまう。
lst.remove(new Integer(3))
のようにする必要があるので、要注意。
Scala 2016/12/21
不変(イミュータブル)なリストの類には、もちろん特定の要素を削除するメソッドはないのだが、削除した新しいリストを返すメソッドもないみたい。
seq.filter(_ != elem)
みたいにフィルタリングすればよさそう。
例
val lst = List(10, 20, 30, 40, 50, 30);
val result = lst.filter(_ != 30);
println(result);
// List(10, 20, 40, 50)
ListBuffer
などの可変(ミュータブル)なリストには -
や -=
がある。
PHP 2015/01/06
新しい配列に1つずつ要素をコピーしていく方法
$target_elem = 30;
$arr = array(10, 20, 30, 40, 50, 30);
$new_arr = array();
foreach ($arr as $v) {
if ($v != $target_elem) {
$new_arr[] = $v;
}
}
var_export($new_arr);
// 出力結果
// array (
// 0 => 10,
// 1 => 20,
// 2 => 40,
// 3 => 50,
// )
unset
を使う方法。
$target_elem = 30;
$arr = array(10, 20, 30, 40, 50, 30);
while (($index = array_search($target_elem, $arr)) !== false) {
unset($arr[$index]);
}
$arr = array_values($arr);
var_export($arr);
// 出力結果
// array (
// 0 => 10,
// 1 => 20,
// 2 => 40,
// 3 => 50,
// )
Python 2014/12/31
リストにある remove
メソッドを使う。
Python2/Python3での例
lst = [10, 20, 30, 40, 50, 30]
lst.remove(30)
print(lst)
# => [10, 20, 40, 50, 30]
指定の値を持つ最初の要素を削除する。同じ値の要素が複数あってもすべてを削除してくれるわけではなく、最初の要素のみを削除する。
要素が見つからなかった場合は ValueError: list.remove(x): x not in list
というエラーを吐く。
Ruby / JRuby 2015/01/01
Array#delete
で指定した要素をすべて削除できる。これは破壊的な操作。
Array#-
を使うと、複数の要素を指定でき、まとめて全部削除した結果の配列を返す。これはもともとの配列を変更しない。
いずれも同じ値の要素が複数あるとすべて削除してくれる。
arr = [10, 20, 30, 40, 50, 30]
p arr - [20, 30]
# => [10, 40, 50]
p arr
# => [10, 20, 30, 40, 50, 30]
arr.delete(30)
p arr
# => [10, 20, 40, 50]
2つは値の比較の基準が違うみたい。delete
は==
を使い、-
はeql?
が使われる。
Array#delete
| Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/method/Array/i/delete.html
Array#-
| Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/method/Array/i/=2d.html
CoffeeScript 2013/04/19
特定の値をすべて削除するには
arr = (o for o in arr when o != remove_target)