Deleting numbers in array

C

Clayton Lane

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!
 
D

David A. Black

Hi --

Clayton said:
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 / Ruby Power and Light, LLC
Ruby/Rails consulting & training: http://www.rubypal.com
Now out in PDF: The Well-Grounded Rubyist (http://manning.com/black2)
"Ruby 1.9: What You Need To Know" Envycasts with David A. Black
http://www.envycasts.com
 
C

Clayton Lane

David said:
Hi --

Clayton said:
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?
 
C

Clayton Lane

Robert said:
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.
 
R

Robert Schaaf

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

David said:
Hi --

Clayton said:
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?
 
C

Clayton Lane

Robert said:
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!
 
7

7stud --

Clayton said:
David said:
Hi --

Clayton said:
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]
 
7

7stud --

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

Not too bad:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <sstream>

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<int> numbers(arr, arr+size);

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

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

return 0;

}

--output:--
51
 
7

7stud --

7stud said:
Clayton said:
David said:
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]
 
7

7stud --

7stud said:
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:
 
D

David A. Black

Hi --
7stud said:
Clayton said:
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]

You're working much too hard :) 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

--
David A. Black / Ruby Power and Light, LLC
Ruby/Rails consulting & training: http://www.rubypal.com
Now out in PDF: The Well-Grounded Rubyist (http://manning.com/black2)
"Ruby 1.9: What You Need To Know" Envycasts with David A. Black
http://www.envycasts.com
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,770
Messages
2,569,583
Members
45,075
Latest member
MakersCBDBloodSupport

Latest Threads

Top