String to array

Capitán

kind of a big deal
Veteran
Joined
Jul 9, 2013
Messages
572
Reaction score
145
First Language
Engilsh
Primarily Uses
RMMV
I request the help of this community on how to properly convert a string into an array, A bunch of confusing code that ultimately returns a variable named team from the server, inside this team variable is the value: 


"[9, 27, 32, 112, 4]"


I need this turned into the array


[9, 27, 32, 112, 4]


I've tried the following:


aTeam = team.tr('[]', '')
vTeam = aTeam.split


did not work, Ruby must have inherently included quotes or something.


Any help would be greatly appreciated
 
Last edited by a moderator:

??????

Diabolical Codemaster
Veteran
Joined
May 11, 2012
Messages
6,548
Reaction score
3,297
First Language
Binary
Primarily Uses
RMMZ
Code:
def stringToArray(aString)
  return aString.tr('[]','').split(',').map{|e|e.to_i}
end

print stringToArray("[9, 27, 32, 112, 4]");
 

Hudell

Dog Lord
Veteran
Joined
Oct 2, 2014
Messages
3,557
Reaction score
3,752
First Language
Java's Crypt
Primarily Uses
RMMZ
Code:
JSON.parse('[9, 27, 32, 112, 4]');
 

Capitán

kind of a big deal
Veteran
Joined
Jul 9, 2013
Messages
572
Reaction score
145
First Language
Engilsh
Primarily Uses
RMMV
def stringToArray(aString)
return aString.tr('[]','').split(',').map{|e|e.to_i}
end

print stringToArray("[9, 27, 32, 112, 4]");
Lovely! You just saved a stressful battle system
 

Capitán

kind of a big deal
Veteran
Joined
Jul 9, 2013
Messages
572
Reaction score
145
First Language
Engilsh
Primarily Uses
RMMV

Sixth

Veteran
Veteran
Joined
Jul 4, 2014
Messages
2,172
Reaction score
831
First Language
Hungarian
Primarily Uses
RMVXA
Why not simply use:


def string_to_array(string)
ary = []
string.scan(/\d+/).each {|num| ary << num.to_i}
return ary
end


You just need the numbers from the string, right? This seems much more simpler than using .tr than .split and than .map to get the numbers.


This will, of course, only work if the string you have can only contain needed numbers, and not some irrelevant numbers which you don't need in your array.
 

??????

Diabolical Codemaster
Veteran
Joined
May 11, 2012
Messages
6,548
Reaction score
3,297
First Language
Binary
Primarily Uses
RMMZ
That's unnecessarily lengthy.. Could easily shorten it...


def stringToArray(aString)
return aString.scan(/\d+/).reduce([]){|r,i|r<<i.to_i}
end



I don't think that would make much difference over my previously suggested solution though. :)


Edit:


Also, eval should never be used when there is a more elegant solution available.
 
Last edited by a moderator:

Zeriab

Huggins!
Veteran
Joined
Mar 20, 2012
Messages
1,275
Reaction score
1,438
First Language
English
Primarily Uses
RMXP
Of the solutions presented here I find the eval the most elegant solution, but at the same time it is clearly the worst.


As Yuuta mentions, the data comes from a server. I.e. the string is tainted. Never ever evaluate tainted strings. This is a far bigger reason than any other for not using the eval solution.



@Dekita


I disagree.  I consider your revision unnecessarily convoluted. Sixth's code clearly communicates what it does. The variable naming reflects what they represent. All of this is small stuff, I know. It's just, I consider going from your version to Sixth's version a good refactoring.


The difference between the two good solutions is quite interesting. The solution by Dekita focuses tearing and splitting according to the specific way the values are packaged, parsing the resulting clumps of strings as integers. The solution by Sixth focuses on the consecutive groups of digits parses the integers without regards to how the values have been packaged. There are pros and cons with each solutions. Removing and adding suffixes and prefixes, altering separation characters. This affects one solution, not another.


The digit scan is more robust to changes in the surrounding chars while the requirement of integers separated by any chars exists. Adding decimals? And the other solution works without changes.


Want to add nesting? Again one solution is easier to modify than the other.


Interesting, right? :3
 

??????

Diabolical Codemaster
Veteran
Joined
May 11, 2012
Messages
6,548
Reaction score
3,297
First Language
Binary
Primarily Uses
RMMZ
@Zeriab I just spent the best part of an hour pondering the implications of this, then I remembered I have actual things to do :D


Side note: I always enjoyed ruby for how easy it is to have all the logic contained on one line, not sure why, but yea.. :)
 

Tsukihime

Veteran
Veteran
Joined
Jun 30, 2012
Messages
8,564
Reaction score
3,851
First Language
English
@Zeriab I just spent the best part of an hour pondering the implications of this, then I remembered I have actual things to do :D


Side note: I always enjoyed ruby for how easy it is to have all the logic contained on one line, not sure why, but yea.. :)


It's also enjoyable to read other people's code golf. Hopefully I never have to modify such code since I don't want to spend an hour wondering what it's actually supposed to do.


The only reason why I might choose not to write out the logic myself is if the engine can perform optimizations to speed up the operation, as opposed to me manually parsing and building up the data myself.
 

Users Who Are Viewing This Thread (Users: 0, Guests: 1)

Latest Threads

Latest Posts

Latest Profile Posts

While we prepare the official trailer, enjoy this kind-of-second teaser! ^^
-Ele
New Episodes of RPG Shenanigans Uploaded to Youtube!

Episode 5 - Surprise Party!
Youtube Link:
Episode 6 - Killer Gin
Youtube Link:
Episode 7 - Gaia's Melody: Echoed Melodies
(Coming soon!)

Episode 8 - Clarent Saga: Tactics
(Coming soon!)

Episode 9 - Star Shift
(Coming soon!)
When the Map Generator throws in the assets in the most dumbest way possible - your path is blocked :D

I went to sleep at 3 am because of my anxiety. Set up my alarm for 7 am so that I could have sasagues for breakfast and do morning routine before lessons starts at 8 am. I knew I wouldn't be able to sleep even after my lessons finished because I have to visit my grandparents today I was sad bc I was really tired. Thats when I realised. My lesson starts at 9 am. I could get one extra hour of sleep if I didnt forget it

Forum statistics

Threads
107,562
Messages
1,030,567
Members
139,671
Latest member
WDRS
Top