Deleting numbers in array


#1

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!


#2

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


#3

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?


#4

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.


#5

Hello Clayton,

Try this.

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

Bob Schaaf


#6

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


#7

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!


#8

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]


#9

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


#10

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]


#11

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


#12

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