Deleting numbers in array

I’m new to Ruby and unsure how to delete numbers in an array. I have an
array filled with numbers from 1 to 100. If I use nums.delete_if {|x| x
== 9 }, it will delete 9, but I want to remove any number containing 9.
For example, 19, 39, 92, 99 etc. I tried using a wildcard, but it didn’t
work. I’m sure theres an easy command to do it, but I wasn’t able to
find it on in Ruby documentation. I also want to remove numbers
containing 0,6,7, and 8 as well. Any help would be greatly appreciated.
Thanks!

Hi –

Clayton Lane wrote:

I’m new to Ruby and unsure how to delete numbers in an array. I have an
array filled with numbers from 1 to 100. If I use nums.delete_if {|x| x
== 9 }, it will delete 9, but I want to remove any number containing 9.
For example, 19, 39, 92, 99 etc. I tried using a wildcard, but it didn’t
work. I’m sure theres an easy command to do it, but I wasn’t able to
find it on in Ruby documentation. I also want to remove numbers
containing 0,6,7, and 8 as well. Any help would be greatly appreciated.

You’re pretty much going to have to convert the numbers to strings. For
example:

array.delete_if {|x| x.to_s[/[06789]/] }

David

David A. Black wrote:

Hi –

Clayton Lane wrote:

I’m new to Ruby and unsure how to delete numbers in an array. I have an
array filled with numbers from 1 to 100. If I use nums.delete_if {|x| x
== 9 }, it will delete 9, but I want to remove any number containing 9.
For example, 19, 39, 92, 99 etc. I tried using a wildcard, but it didn’t
work. I’m sure theres an easy command to do it, but I wasn’t able to
find it on in Ruby documentation. I also want to remove numbers
containing 0,6,7, and 8 as well. Any help would be greatly appreciated.

You’re pretty much going to have to convert the numbers to strings. For
example:

array.delete_if {|x| x.to_s[/[06789]/] }

David

Wow! Ruby is so good! I’m unsure of how to do this final step too. If
any numbers don’t contain 1, remove them. Any ideas?

Robert S. wrote:

Hello Clayton,

Try this.

nums.delete_if {|x| x.to_s.include? ‘9’}

Bob Schaaf

Hmmm didn’t seem to work. I’m just trying to remove numbers that don’t
contain 1. For example, 21 would be allowed, but 22 wouldn’t.

Hello Clayton,

Try this.

nums.delete_if {|x| x.to_s.include? ‘9’}

Bob Schaaf

nums.delete_if {|x| !x.to_s.include? ‘1’}

Robert S. wrote:

nums.delete_if {|x| !x.to_s.include? ‘1’}

Amazing! I tried to do this in C++ and it was a nightmare. Ruby is
amazing. Thanks for the help!

Clayton Lane wrote:

David A. Black wrote:

Hi –

Clayton Lane wrote:

I’m new to Ruby and unsure how to delete numbers in an array. I have an
array filled with numbers from 1 to 100. If I use nums.delete_if {|x| x
== 9 }, it will delete 9, but I want to remove any number containing 9.
For example, 19, 39, 92, 99 etc. I tried using a wildcard, but it didn’t
work. I’m sure theres an easy command to do it, but I wasn’t able to
find it on in Ruby documentation. I also want to remove numbers
containing 0,6,7, and 8 as well. Any help would be greatly appreciated.

You’re pretty much going to have to convert the numbers to strings. For
example:

array.delete_if {|x| x.to_s[/[06789]/] }

David

Wow! Ruby is so good! I’m unsure of how to do this final step too. If
any numbers don’t contain 1, remove them. Any ideas?

arr = [51, 52, 20, 36, 79]
result = arr.delete_if {|x| x.to_s[/[06789]/]}
p result

–output:–
[51, 52]

result = arr.delete_if do |x|
str = x.to_s
str[/[02345]/] and not str[/1/]
end
p result

–output:–
[51]

Clayton Lane wrote:

Robert S. wrote:

nums.delete_if {|x| !x.to_s.include? ‘1’}

Amazing! I tried to do this in C++ and it was a nightmare.

Not too bad:

#include
#include
#include
#include
#include

bool mytest(int x)
{
//convert x to string:

string str;
stringstream my_ss;
my_ss<<x;
my_ss>>str;

//perform test:

string bad_numbers = “06789”;

if(str.find_first_of(bad_numbers) != string::npos)
return true; //found a bad number in str
else if(str.find(“1”) == string::npos)
return true; //found ‘1’ in str
else
return false; //don’t remove
}

int main()
{
int arr[] = {51, 52, 20, 36, 79};
int size = 5;

    //insert numbers in a vector:

vector numbers(arr, arr+size);

//remove bad numbers:
vector::iterator new_end;
new_end = remove_if(numbers.begin(), numbers.end(), mytest);
numbers.erase(new_end, numbers.end());

//display the results:
vector::iterator pos = numbers.begin();
for(pos; pos != numbers.end(); ++pos)
{
cout<<*pos<<" ";
}
cout<<endl;

return 0;

}

–output:–
51

7stud – wrote:

Clayton Lane wrote:

David A. Black wrote:

Hi –

Clayton Lane wrote:

I’m new to Ruby and unsure how to delete numbers in an array. I have an
array filled with numbers from 1 to 100. If I use nums.delete_if {|x| x
== 9 }, it will delete 9, but I want to remove any number containing 9.
For example, 19, 39, 92, 99 etc. I tried using a wildcard, but it didn’t
work. I’m sure theres an easy command to do it, but I wasn’t able to
find it on in Ruby documentation. I also want to remove numbers
containing 0,6,7, and 8 as well. Any help would be greatly appreciated.

You’re pretty much going to have to convert the numbers to strings. For
example:

array.delete_if {|x| x.to_s[/[06789]/] }

David

Wow! Ruby is so good! I’m unsure of how to do this final step too. If
any numbers don’t contain 1, remove them. Any ideas?

arr = [51, 52, 20, 36, 79]
result = arr.delete_if {|x| x.to_s[/[06789]/]}
p result

–output:–
[51, 52]

result = arr.delete_if do |x|
str = x.to_s
str[/[02345]/] and not str[/1/]
end
p result

–output:–
[51]

lol. I screwed that up! I guess it was easier for me in C++ than ruby.
Hmm…for a ruby solution, I find that I have to use the same structure
as the C++ program:

arr = [51, 52, 22, 20, 36, 79]
result = arr.delete_if {|x| x.to_s[/[06789]/]}
p result

result = arr.delete_if do |x|
str = x.to_s

if str[/06789/]
true #delete
elsif not str[/1/]
true #delete
else
false #keep
end

end
p result

–output:–
[51, 52, 22]
[51]

Hi –

7stud – wrote:

work. I’m sure theres an easy command to do it, but I wasn’t able to
any numbers don’t contain 1, remove them. Any ideas?
end
result = arr.delete_if {|x| x.to_s[/[06789]/]}
false #keep
end

end
p result

–output:–
[51, 52, 22]
[51]

You’re working much too hard :slight_smile: I’m not sure whether the OP only cares
about the 1’s, or wants to do both tests, but assuming the latter:

arr.delete_if {|x| s = x.to_s; s[/[06789]/] ||! s[/1/] }

David

7stud – wrote:

if(str.find_first_of(bad_numbers) != string::npos)
return true; //found a bad number in str
else if(str.find(“1”) == string::npos)
return true; //found ‘1’ in str

Bad comment for the last line. It should be:

else if(str.find(“1”) == string::npos)
return true; //did not find a ‘1’ in str