2012年1月16日月曜日

[ruby]配列の複数の要素を削除する

あらかじめ用意されているメソッドは2つ。

①delete_ifメソッド
配列から指定条件を満たす要素を削除(複数要素)

data = [5,1,2,4,3]
data.delete_if {|x| x < 3} # 値が3未満の要素を削除 p data => [5, 4, 3]

②slice!メソッド
配列の任意の場所から削除(複数要素)

data = [5,1,2,4,3]
data.slice!(1, 2) # 位置1から2要素分を削除
p data
=> [5, 4, 3]

参考URL(http://l-w-i.net/t/ruby/array_001.txt)

===

しかし,任意の値を複数削除するためには,これらの条件をうまく適応できない場合もある。
そこで,配列Aの要素の中から配列Bの要素と同じものを取り除く場合を考える。

data1 = [5,1,2,4,3]
data2 = [1,4]
data2.each do |d1|
data1.each do |d2|
if d1 == d2
data1.delete(d1)
end
end
end
p data1
=> [5,2,3]

注意として,eachで回す最初の配列をdata1にすると,ループが回っている最中に配列の要素が削除されることで,
ループが任意の回数回らずに終わってしまう。そのため,1度に全ての要素を削除できないことがある。

0 件のコメント:

コメントを投稿