Project1
标题: 简单的字符串转数组示例 [打印本页]
作者: Mr.Jin 时间: 2014-6-26 09:34
标题: 简单的字符串转数组示例
- n = "8,20,17"
- a = n.split(",")
- b = a[0].to_i
- c = a[1].to_i
- d = a[2].to_i
- e = [b,c,d]
- p e
复制代码 这样子写比较便于新手看,大体就是把字符串用","分割开并以数组返回,
但其内容是字符串,我用了比较好懂的写法把它们一个一个to_i转成数字再代回了
这个的用途可能比较少,但是呢...还是应该会有人用的吧,
比如读取rmvx备注里你也可以写数组了,因为它读取出来的都是字符串,你可以这样转换它方便使用
作者: taroxd 时间: 2014-6-26 09:40
str.split(/\s*,\s*/).map(&:to_i)
作者: chd114 时间: 2014-7-2 12:21
如果我要每一个字符都分呢···XP的伤害数值可以一个个分出来···但文字的话···
作者: taroxd 时间: 2014-7-2 12:31
chd114 发表于 2014-7-2 12:21
如果我要每一个字符都分呢···XP的伤害数值可以一个个分出来···但文字的话··· ...
str = 'hello world!'
str.chars #=> ["h", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d", "!"]
str = 'hello world!'
str.chars #=> ["h", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d", "!"]
正则表达式看这里:https://rpg.blue/thread-357273-1-1.html
简单使用的话,学个30分钟就好了
作者: chd114 时间: 2014-7-2 12:32
taroxd 发表于 2014-7-2 12:31
str = 'hello world!'
str.chars # => ["h", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d", "!"]
这个是全部通用的?那str.split(/\s*,\s*/).map(&:to_i)是什么意思···
作者: taroxd 时间: 2014-7-2 12:38
chd114 发表于 2014-7-2 12:32
这个是全部通用的?那str.split(/\s*,\s*/).map(&:to_i)是什么意思···
str.split(/\s*,\s*/) 把str按照逗号分隔,逗号的前后可以有空格(其实空格无所谓,我习惯了而已)
例:
str = " 123 , 456, 789 "
array = str.split(/\s*,\s*/) #=> [" 123", "456", "789 "]
str = " 123 , 456, 789 "
array = str.split(/\s*,\s*/) #=> [" 123", "456", "789 "]
array.map(&:to_i) 相当于 array.map {|str| str.to_i }
例:
[" 123", "456", "789 "].map(&:to_i) #=> [123, 456, 789]
[" 123", "456", "789 "].map(&:to_i) #=> [123, 456, 789]
看不懂的话,以后有空可以来看看这个帖子:https://rpg.blue/thread-367517-1-1.html
现在还没有写好就是了=。=
作者: taroxd 时间: 2014-7-2 12:43
本帖最后由 taroxd 于 2014-7-2 12:46 编辑
@Mr.Jin
经测试,chars效率远高于split(//)
chars效率又高一些,又通俗易懂一些,为什么会不如split?
另外只是迭代的话,用each_char会更加舒服
测试代码:
require 'benchmark'
big = 10000000
string = '*' * big
Benchmark.bmbm do |x|
x.report("split: ") {string.split(//)}
x.report("chars: ") {string.chars}
end
require 'benchmark'
big = 10000000
string = '*' * big
Benchmark.bmbm do |x|
x.report("split: ") {string.split(//)}
x.report("chars: ") {string.chars}
end
输出:- Rehearsal -------------------------------------------
- split: 4.352000 0.172000 4.524000 ( 4.811275)
- chars: 0.749000 0.280000 1.029000 ( 1.352077)
- ---------------------------------- total: 5.553000sec
- user system total real
- split: 3.931000 0.078000 4.009000 ( 4.231242)
- chars: 0.765000 0.047000 0.812000 ( 1.063061)
复制代码
作者: chd114 时间: 2014-7-2 12:43
taroxd 发表于 2014-7-2 12:38
str.split(/\s*,\s*/) 把str按照逗号分隔,逗号的前后可以有空格(其实空格无所谓,我习惯了而已)
例: ...
str.split(/\s*\\s*/)那这样岂不是要出错了···
作者: taroxd 时间: 2014-7-2 12:45
chd114 发表于 2014-7-2 12:43
str.split(/\s*\\s*/)那这样岂不是要出错了···
如果要用斜杠的话,应该是
str.split(/\s*\\\s*/)
但说真的,那个\s*有没有其实无所谓啦,个人习惯而已
作者: chd114 时间: 2014-7-2 12:56
taroxd 发表于 2014-7-2 12:45
如果要用斜杠的话,应该是
str.split(/\s*\\\s*/)
str.split(/\/) 这样就可以了?
作者: taroxd 时间: 2014-7-2 12:57
chd114 发表于 2014-7-2 12:56
str.split(/\/) 这样就可以了?
str.split(/\\/) 或者 str.split('\\')
反斜杠是转义符,所以始终记得用两个反斜杠来表示一个反斜杠
作者: chd114 时间: 2014-7-2 13:12
taroxd 发表于 2014-7-2 12:45
如果要用斜杠的话,应该是
str.split(/\s*\\\s*/)
如果要用空格来判定呢?
作者: taroxd 时间: 2014-7-2 13:13
chd114 发表于 2014-7-2 13:12
如果要用空格来判定呢?
str.split(/\s+/)
有问题先自己去学正则表达式,再来问。不夸张地说,这种简单的正则30分钟就学得会的。
作者: chd114 时间: 2014-7-2 14:14
taroxd 发表于 2014-7-2 12:45
如果要用斜杠的话,应该是
str.split(/\s*\\\s*/)
表示我在玩RM···写了个计算log的结果算出来怪怪的···还有个碾转相除法各种错···
作者: taroxd 时间: 2014-7-2 14:16
chd114 发表于 2014-7-2 14:14
表示我在玩RM···写了个计算log的结果算出来怪怪的···还有个碾转相除法各种错··· ...
计算log可以直接用 Math.log(num, base)
例: Math.log(125, 5) #=> 3.0000000000000004
辗转相除法如果是求最大公约数,那么Ruby也已经为你定义好了
例: 24.gcd(32) #=> 8
作者: chd114 时间: 2014-7-2 14:22
taroxd 发表于 2014-7-2 14:16
计算log可以直接用 Math.log(num, base)
例: Math.log(125, 5) #=> 3.0000000000000004
这···ruby什么的到底定义了哪些···
作者: taroxd 时间: 2014-7-2 14:22
chd114 发表于 2014-7-2 14:22
这···ruby什么的到底定义了哪些···
参考Ruby文档
(这楼歪的……)
作者: chd114 时间: 2014-7-2 14:28
taroxd 发表于 2014-7-2 14:22
参考Ruby文档
(这楼歪的……)
RMXP的那个F1文档?
作者: taroxd 时间: 2014-7-2 14:33
chd114 发表于 2014-7-2 14:28
RMXP的那个F1文档?
Ruby文档非RM的F1文档。RM的F1帮助文档的Ruby部分那就是个坑
http://ruby-doc.org/core-1.9.2/ 这是VA的版本,还是不错的。其中大部分的方法在XP中也可以用。
如果你手上没有什么坑的话,我推荐你转VA呢
作者: chd114 时间: 2014-7-2 15:11
taroxd 发表于 2014-7-2 14:33
Ruby文档非RM的F1文档。RM的F1帮助文档的Ruby部分那就是个坑
http://ruby-doc.org/core-1.9.2/ 这是VA的 ...
我英语水平不够···有中英对照吗···谷歌翻译就是一个坑···转VA的话再看吧···电脑渣了VA玩不起来···
作者: chd114 时间: 2014-7-4 20:04
taroxd 发表于 2014-7-2 12:31
str = 'hello world!'
str.chars #=> ["h", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d", "!"]
[ ...
- str = 'hello world!'
- str.chars #=> ["h", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d", "!"]
- p str
复制代码 回家试了下···然后p的结果出错了···是什么情况···
作者: taroxd 时间: 2014-7-4 20:08
chd114 发表于 2014-7-4 20:04
回家试了下···然后p的结果出错了···是什么情况···
……老老实实回家学Ruby去
作者: chd114 时间: 2014-7-4 20:10
taroxd 发表于 2014-7-4 20:08
……老老实实回家学Ruby去
那个不能用p吗。。。
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |