查看: 5169|回复: 22

[讨论] 简单的字符串转数组示例

[复制链接]
梦石
0
星屑
9687
在线时间
3224 小时
注册时间
2011-3-24
回帖
616

开拓者

发表于 2014-6-26 09:34:58 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
  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备注里你也可以写数组了,因为它读取出来的都是字符串,你可以这样转换它方便使用

点评

是很棒啦,但我的意思是你写的这种肯定没几个菜鸟能看懂  发表于 2014-6-27 13:11
p e = b,c,d = *n.split(",")  发表于 2014-6-27 12:27
>>→Lanza Games 2020←<<
Lanza Schneider
浪子心,孤星梦永远流浪……
~不会放弃,我的精力永远充沛~
>>>>>Lanza Adventure<<<<<
>>>>>Lanza的新年派对!<<<<<
>>>>>Lanza的口袋心脏病!<<<<<

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-6-26 09:40:45 来自手机 | 显示全部楼层
str.split(/\s*,\s*/).map(&:to_i)

点评

正则我一直没看明白···是把str分出去还是什么···好吧我英语不行···  发表于 2014-7-2 12:21
moy
不是人人都愿意去学正则……特别是不打算深入研究的时候  发表于 2014-6-26 10:06
正则表达式~  发表于 2014-6-26 10:02
回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 2014-7-2 12:21:51 | 显示全部楼层
如果我要每一个字符都分呢···XP的伤害数值可以一个个分出来···但文字的话···
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-7-2 12:31:32 | 显示全部楼层
chd114 发表于 2014-7-2 12:21
如果我要每一个字符都分呢···XP的伤害数值可以一个个分出来···但文字的话··· ...


[pre lang="ruby" line="1"]
str = 'hello world!'
str.chars #=> ["h", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d", "!"]
[/pre]

正则表达式看这里:https://rpg.blue/thread-357273-1-1.html
简单使用的话,学个30分钟就好了

点评

效果一样,但是显然chars更加易读不是吗?  发表于 2014-7-2 12:40
为什么我觉得.split(//)更好...  发表于 2014-7-2 12:33
回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 2014-7-2 12:32:35 | 显示全部楼层
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)是什么意思···
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-7-2 12:38:08 | 显示全部楼层
chd114 发表于 2014-7-2 12:32
这个是全部通用的?那str.split(/\s*,\s*/).map(&:to_i)是什么意思···

str.split(/\s*,\s*/) 把str按照逗号分隔,逗号的前后可以有空格(其实空格无所谓,我习惯了而已)
例:
[pre lang="ruby" line="1"]
str = "  123  ,  456, 789  "
array = str.split(/\s*,\s*/) #=> ["  123", "456", "789  "]
[/pre]

array.map(&:to_i) 相当于 array.map {|str| str.to_i }
例:
[pre lang="ruby" line="1"]["  123", "456", "789  "].map(&:to_i) #=> [123, 456, 789][/pre]

看不懂的话,以后有空可以来看看这个帖子:https://rpg.blue/thread-367517-1-1.html
现在还没有写好就是了=。=
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-7-2 12:43:00 | 显示全部楼层
本帖最后由 taroxd 于 2014-7-2 12:46 编辑

@Mr.Jin
经测试,chars效率远高于split(//)
chars效率又高一些,又通俗易懂一些,为什么会不如split?
另外只是迭代的话,用each_char会更加舒服

测试代码:
[pre lang="ruby" line="1"]
require 'benchmark'
big = 10000000
string = '*' * big

Benchmark.bmbm do |x|
  x.report("split: ") {string.split(//)}
  x.report("chars: ") {string.chars}
end[/pre]

输出:
  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)
复制代码

点评

Orz了解给跪了  发表于 2014-7-2 13:06
回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 2014-7-2 12:43:59 | 显示全部楼层
taroxd 发表于 2014-7-2 12:38
str.split(/\s*,\s*/) 把str按照逗号分隔,逗号的前后可以有空格(其实空格无所谓,我习惯了而已)
例:  ...

str.split(/\s*\\s*/)那这样岂不是要出错了···
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-7-2 12:45:22 | 显示全部楼层
chd114 发表于 2014-7-2 12:43
str.split(/\s*\\s*/)那这样岂不是要出错了···


如果要用斜杠的话,应该是
str.split(/\s*\\\s*/)

但说真的,那个\s*有没有其实无所谓啦,个人习惯而已

点评

写得很好哦~ 这些东西都是Ruby共通的,和RGSS关系不大  发表于 2014-7-2 14:06
写了一个问题的解答~不过我对RGSS1比较熟,写得也不知道行不行  发表于 2014-7-2 13:59
......  发表于 2014-7-2 13:27
这和VA没有关系啊=。=  发表于 2014-7-2 13:19
VA没怎么用过···因为以前的电脑用VA老是丢文件···写什么东西呢···  发表于 2014-7-2 13:18
回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 2014-7-2 12:56:29 | 显示全部楼层
taroxd 发表于 2014-7-2 12:45
如果要用斜杠的话,应该是
str.split(/\s*\\\s*/)

str.split(/\/) 这样就可以了?

点评

钓上触手一只。其实反面我已经回答过了啦~ 愿意的话,要不要来VA区活动贴写点东西呢  发表于 2014-7-2 13:12
str.split(/\\/)  发表于 2014-7-2 12:59
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部