lith wrote: >> I would like array1 to remain unchanged. It seems a little inefficient >> to clone array1 every time some_method is called. > > If your code is slow, it's not because of this use of clone. If your > code isn't, don't bother. "Inefficient" can also refer to memory. If the array has 4 million entries, to copy it 100 times might be considered inefficient in that sense. How about something like this: class MyArray include Enumerable def MyArray.init(arr) @@arr = arr end def initialize @deleted = {} end def delete_at(i) @deleted[i] = true end def each @@arr.each_with_index do |elmt, i| next if @deleted[i] yield elmt end end def get_arr out = [] @@arr.each_with_index do |elmt, i| next if @deleted[i] out << elmt end out end end MyArray.init ["banana", "strawberry", "apple"] data1 = MyArray.new data2 = MyArray.new data1.delete_at(0) data2.delete_at(1) p data1.get_arr puts "------" p data2.get_arr puts search1 = data1.select do |elmt| elmt.length > 5 end p search1 puts "Found apple." if data2.include? "apple" --output:-- ["strawberry", "apple"] ------ ["banana", "apple"] ["strawberry"] Found apple. -- Posted via http://www.ruby-forum.com/.