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,519
Reaction score
3,221
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,546
Reaction score
3,717
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,162
Reaction score
823
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,519
Reaction score
3,221
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,269
Reaction score
1,423
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,519
Reaction score
3,221
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,848
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 Profile Posts

Don't forget, aspiring writers: Personality isn't what your characters do, it is WHY they do it.
Hello! I would like to know if there are any pluggings or any way to customize how battles look?
I was thinking that when you start the battle for it to appear the eyes of your characters and opponents sorta like Ace Attorney.
Sadly I don't know how that would be possible so I would be needing help! If you can help me in any way I would really apreciate it!
The biggest debate we need to complete on which is better, Waffles or Pancakes?
rux
How is it going? :D
Day 9 of giveaways! 8 prizes today :D

Forum statistics

Threads
106,051
Messages
1,018,549
Members
137,837
Latest member
Dabi
Top