Project1

标题: 简单的字符串转数组示例 [打印本页]

作者: Mr.Jin    时间: 2014-6-26 09:34
标题: 简单的字符串转数组示例
  1. n = "8,20,17"
  2. a = n.split(",")
  3. b = a[0].to_i
  4. c = a[1].to_i
  5. d = a[2].to_i
  6. e = [b,c,d]
  7. 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的伤害数值可以一个个分出来···但文字的话··· ...


RUBY 代码复制
  1. str = 'hello world!'
  2. 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按照逗号分隔,逗号的前后可以有空格(其实空格无所谓,我习惯了而已)
例:
RUBY 代码复制
  1. str = "  123  ,  456, 789  "
  2. array = str.split(/\s*,\s*/) #=> ["  123", "456", "789  "]


array.map(&:to_i) 相当于 array.map {|str| str.to_i }
例:
RUBY 代码复制
  1. ["  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会更加舒服

测试代码:
RUBY 代码复制
  1. require 'benchmark'
  2. big = 10000000
  3. string = '*' * big
  4.  
  5. Benchmark.bmbm do |x|
  6.   x.report("split: ") {string.split(//)}
  7.   x.report("chars: ") {string.chars}
  8. end


输出:
  1. Rehearsal -------------------------------------------
  2. split:    4.352000   0.172000   4.524000 (  4.811275)
  3. chars:    0.749000   0.280000   1.029000 (  1.352077)
  4. ---------------------------------- total: 5.553000sec

  5.               user     system      total        real
  6. split:    3.931000   0.078000   4.009000 (  4.231242)
  7. 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", "!"]
[ ...
  1. str = 'hello world!'
  2. str.chars #=> ["h", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d", "!"]
  3. 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