I’m trying to delete elements of an array if they match a string but my
code always leaves some matches and I think it’s because it’s having
trouble iterating through the same array it is trying to delete from, is
that true?
Here is the code:
@acl_all_array.each do |range|
if range[/access-list/]
@acl_all_array.delete(range)
puts range
end
end
Is this the correct way to delete matched entries from an array?
Thanks
John
jackster the jackle wrote:
puts range
end
end
Is this the correct way to delete matched entries from an array?
Thanks
John
Use delete_if instead.
Tim H. wrote:
jackster the jackle wrote:
puts range
end
end
Is this the correct way to delete matched entries from an array?
Thanks
John
Use delete_if instead.
Or Array#reject!
deleting while iterating with each is undefined behavior. It’s like
sawing off the tree branch you are sitting on.
Or Array#reject!
deleting while iterating with each is undefined behavior. It’s like
sawing off the tree branch you are sitting on.
hehehe…I know what you mean!
Tim’s solution worked, I used:
@acl_all_array.each do |range|
if range[/access-list/]
@acl_range.push(range)
end
end
@acl_all_array.delete_if { |x| x[/access-list/] }
Thanks for all the help guys…I am going to read up on Array#reject! to
see how that might help me.
john
I believe there is a method on Array called delete_if for just such a
case…
IIRC
/Shawn
Hi –
On Sat, 4 Oct 2008, jackster the jackle wrote:
@acl_all_array.each do |range|
if range[/access-list/]
@acl_range.push(range)
end
end
@acl_all_array.delete_if { |x| x[/access-list/] }
Thanks for all the help guys…I am going to read up on Array#reject! to
see how that might help me.
Check out Array#partition too. What you’ve got there looks like it
could be:
@acl_all_array, @acl_range = @acl_all_array.partition do |range|
range[/access-list/]
end
or something like that.
David
David A. Black wrote:
Hi –
Check out Array#partition too. What you’ve got there looks like it
could be:
@acl_all_array, @acl_range = @acl_all_array.partition do |range|
range[/access-list/]
end
or something like that.
good call David…I’m going to try and incorporate that into my code.
Nice to see you on the forum! I’m still mad that my training was never
approved
john
On 04.10.2008 12:26, jackster the jackle wrote:
or something like that.
And, to give you another option you can fill the second array inside the
delete_if block as well:
@acl_all_array.delete_if { |x| x[/access-list/] and
@acl_range.push(x)}
Cheers
robert