字符串分割成数组:
可以使用先scan再join的方法,当然其实有更好的 split方法,专门用来分割字符串

 # 在Ruby中,如果不使用inspect,直接使用puts输出数组,那么每个元素会占用一行输出
irb(main):001:0> puts "Short sentence.Another.No more".split(/\./)
Short sentence
Another
No more
=> nil
irb(main):002:0> puts "Short sentence.Another.No more".split(/\./).inspect
["Short sentence", "Another", "No more"]
=> nil

Split

数组迭代:
可以直接使用each方法来对每个元素进行遍历输出:

 irb(main):005:0> a = [1, 2, 3, 4]
=> [1, 2, 3, 4]
# collection对每一个元素进行迭代,返回的结果作为新的数组结果
irb(main):009:0> b = a.collect do |element| element*2 end
=> [2, 4, 6, 8]
irb(main):010:0> b
=> [2, 4, 6, 8]
# 如果不对元素进行任何操作,则返回的为同样个数每个元素为nil的数组
irb(main):011:0> b = a.collect do |element| puts element end
1
2
3
4
=> [nil, nil, nil, nil]
irb(main):012:0> b
=> [nil, nil, nil, nil]
# each永远返回原来的数组,没法改变原来的数组
irb(main):013:0> b = a.each do |element| end
=> [1, 2, 3, 4]
irb(main):014:0> b
=> [1, 2, 3, 4]
irb(main):015:0> b = a.each do |element| element*3 end
=> [1, 2, 3, 4]
irb(main):016:0> b
=> [1, 2, 3, 4]
# each一般用来进行相关操作
irb(main):018:0> a.each do |element| puts element end
1
2
3
4
=> [1, 2, 3, 4]

ArrayIterator

ruby中的数组声明同java,最后一个,(逗号) 可要可不要
 
数组的其他操作:

 irb(main):019:0> b = [2, 3, 4, 5]
=> [2, 3, 4, 5]
# 数组支持 + -,相当于Redis中的UNION和DIFF。返回操作之后的数组,原数组不会变
irb(main):020:0> a - b
=> [1]
# 判断是否为空
irb(main):021:0> puts "a is not empty" unless a.empty?
a is not empty
=> nil
# 判断是否包含某元素
irb(main):022:0> a.include?(3)
=> true
# 返回第一个元素
irb(main):023:0> a.first
=> 1
# 返回最后一个元素
irb(main):024:0> a.last
=> 4
# 返回开始的3个元素
irb(main):025:0> a.first(3)
=> [1, 2, 3]
irb(main):026:0> a.last(3)
=> [2, 3, 4]
# 逆序
irb(main):027:0> a.reverse
=> [4, 3, 2, 1]
# 原数组不会变
irb(main):028:0> a
=> [1, 2, 3, 4]

OtherOp

散列表:

 # 基本形式
irb(main):029:0> dict = {'cat'=>'cat1', 'dog'=>'dog1'}
=> {"cat"=>"cat1", "dog"=>"dog1"}
# key必须为字符串或者标志
irb(main):030:0> dict2 = {cat=>cat1}
NameError: undefined local variable or method `cat' for main:Object
Did you mean? catch
from (irb):30
from /usr/bin/irb:11:in `<main>'
irb(main):031:0> dict2 = {'cat'=>cat1}
NameError: undefined local variable or method `cat1' for main:Object
Did you mean? catch
from (irb):31
from /usr/bin/irb:11:in `<main>'
irb(main):032:0> dict2 = {:cat=>'cat1'}
=> {:cat=>"cat1"}
# length和size都可以得到长度
irb(main):033:0> dict.length
=> 2
irb(main):034:0> dict.size
=> 2
irb(main):035:0> dict['cat']
=> "cat1"
# 不支持.访问
irb(main):036:0> dict.cat
NoMethodError: undefined method `cat' for {"cat"=>"cat1", "dog"=>"dog1"}:Hash
from (irb):36
from /usr/bin/irb:11:in `<main>'

Hash

迭代散列表:

 irb(main):037:0> dict.each do |key, value| puts "#{key} matches #{value}" end
cat matches cat1
dog matches dog1
=> {"cat"=>"cat1", "dog"=>"dog1"}

Iterator

得到散列中的所有键和值:

 irb(main):038:0> dict.keys.inspect
=> "[\"cat\", \"dog\"]"
irb(main):039:0> dict.values.inspect
=> "[\"cat1\", \"dog1\"]"

KeysValues

删除散列中的元素:

 # 直接删除
=> "[\"cat1\", \"dog1\"]"
irb(main):040:0> dict.delete('cat')
=> "cat1"
irb(main):041:0> dict
=> {"dog"=>"dog1"}
# 有条件的删除
irb(main):042:0> dict.delete_if do |key, value| value == 'dog1' end
=> {}
irb(main):043:0> dict
=> {}

Delete

添加元素:

可以直接每次使用中括号对属性进行赋值:

a['key'] = 'value';

也可以可以利用merge小技巧

 irb(main):053:0> dict.merge({'dog'=>'dog1'})
=> {"dog"=>"dog1"}
irb(main):054:0> dict.merge({'cat'=>'cat1', 'newDog'=>'dog2', 'newCat'=>'cat2'})
=> {"cat"=>"cat1", "newDog"=>"dog2", "newCat"=>"cat2"}
# 发现merge只是返回一个新的hash,不能改变原来的hash
irb(main):055:0> dict
=> {}
# 可以通过下面的方式巧妙的添加元素:
irb(main):057:0> dict = dict.merge({'cat'=>'cat1', 'newDog'=>'dog2', 'newCat'=>'cat2'})
=> {"cat"=>"cat1", "newDog"=>"dog2", "newCat"=>"cat2"}
irb(main):058:0> dict
=> {"cat"=>"cat1", "newDog"=>"dog2", "newCat"=>"cat2"}

Add

散列表中可以嵌套散列表,我们可以通过多重key值进行访问

 # 散列中的元素也可以是散列值
irb(main):059:0> dict = dict.merge({'animal'=>{'insideCat'=>'cat3'}})
=> {"cat"=>"cat1", "newDog"=>"dog2", "newCat"=>"cat2", "animal"=>{"insideCat"=>"cat3"}}
irb(main):060:0> dict['animal']
=> {"insideCat"=>"cat3"}
# 可以嵌套获取值
irb(main):061:0> dict['animal']['insideCat']
=> "cat3"

InsideHash

流程控制:
if 、unless 
if elsif 
case:

 fruit = 'orange'
irb(main):084:0> case fruit
irb(main):085:1> when 'orange'
irb(main):086:1> color = 'orange'
irb(main):087:1> when 'apple'
irb(main):088:1> color = 'green'
irb(main):089:1> else
irb(main):090:1* color = 'unknown'
irb(main):091:1> end
=> "orange" # 上例可以简化为
irb(main):092:0> color = case fruit
irb(main):093:1> when 'orange'
irb(main):094:1> 'orange'
irb(main):095:1> else 'unknown' end
=> "orange"
irb(main):096:0> color
=> "orange"

Case

while
until:与while相反,直到条件满足才跳出循环

 irb(main):097:0> x = 1
=> 1
irb(main):098:0> until x > 99
irb(main):099:1> puts x
irb(main):100:1> x = x * 20
irb(main):101:1> end
1
20
=> nil

Until

Ruby(3):基本语法中的更多相关文章

  1. ruby之基础语法

    ruby语法之哈希 =>相当于python的字典 ruby语法之数组 =>相当于python的列表 举例: gitaly= Hash.new #建立新Hash类型 gitaly['firs ...

  2. C#语法中一个问号(?)和两个问号(??)的运算符是什么意思?

    (1).C#语法中一个个问号(?)的运算符是指:可以为 null 的类型. MSDN上面的解释: 在处理数据库和其他包含不可赋值的元素的数据类型时,将 null 赋值给数值类型或布尔型以及日期类型的功 ...

  3. C#语法中一个问号(?)和两个问号(??)的运算符

    (1).C#语法中一个个问号(?)的运算符是指:可以为 null 的类型. MSDN上面的解释: 在处理数据库和其他包含不可赋值的元素的数据类型时,将 null 赋值给数值类型或布尔型以及日期类型的功 ...

  4. 【原创】6. 在MYSQL++中实现SQL语法中的NULL

    这次要说明的是在MYSQL++中为了实现SQL中的NULL而做出的一系列的举措.我的感觉是Null<T, B>类型通常出现在SSQLS和template Query中比较多. 1. 什么是 ...

  5. Ruby(或cmd中)输入命令行编译sass

    Ruby(或cmd中)输入命令行编译sass步骤如下: 举例: 1.在F盘中新建一个总文件夹,比如test文件夹,其中在该文件夹下面建立html.images.js.sass等文件夹. 2.在sass ...

  6. ruby for in 循环中改变i的值无效

    ruby for in 循环中改变i的值无效 for j in 1..5 puts "#{j}hehe" j = j + 2 #break end 在循环中,使用j = j + 2 ...

  7. C++ 炼气期之基本结构语法中的底层逻辑

    1. 前言 从语言的分类角度而言,C++是一种非常特殊的存在.属于高级语言范畴,但又具有低级语言的直接访问硬件的能力,这也成就了C++语言的另类性,因保留有其原始特性,其语法并不象其它高级语言一样易理 ...

  8. Razor语法中绑定一个值给checkbox

    在ASP.NET MVC开发中,需要绑定一个值给checkbox标签,如下面写法,它们运行时是没有问题,照样能跑. 看看上面的语法,在绑定时,它却出现绿浪线.提不绑定的值is not a valid ...

  9. Ruby的基本语法-数组

    Ruby中数组的实例 1.color=["Red", "Green" ,"Blue"] #数组赋值

随机推荐

  1. ASP.NET MVC 防止CSRF攻击

    简介 MVC中的Html.AntiForgeryToken()是用来防止跨站请求伪造(CSRF:Cross-site request forgery)攻击的一个措施,它跟XSS(XSS又叫CSS:Cr ...

  2. php foreach 遍历细节探讨

    foreach 也是正常的语法循环结构,可以有 break 和 continue 等操作 遍历过程中值变量传递默认是值传递 输出结果为: 遍历过程中值变量可以认为设定为引用传递:foreach($数组 ...

  3. WPF自定义ComboBox

    <ControlTemplate x:Key="ComboBoxTextBox" TargetType="{x:Type TextBox}"> &l ...

  4. 洛谷P4250 [SCOI2015]小凸想跑步(半平面交)

    题面 传送门 题解 设\(p\)点坐标为\(x_p,y_p\),那么根据叉积可以算出它与\((i,i+1)\)构成的三角形的面积 为了保证\(p\)与\((0,1)\)构成的面积最小,就相当于它比其它 ...

  5. hadoop1.0.4运行程序出现“Java heap Space”错误

    根据虾皮博客中教程,成功搭建了一个12台电脑的Hadoop云平台,而且成功运行了软件自带的wordcount程序,处理10M数据. 但是当程序处理40M时候,却出错了.出错提示“Java Heap S ...

  6. LNMP搭建流程

    参考张宴的nginx搭建流程. http://zyan.cc/nginx_php_v6/

  7. SSM搭建

    SSM搭建 SSM(Spring+SpringMVC+MyBatis)框架集由Spring.SpringMVC.MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架.. Sprin ...

  8. 转一下大师兄的"MySQL高可用架构之MHA"

    简介: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是 ...

  9. 4.1.1 Choosing the SST Donor

    摘要: 出处:黑洞中的奇点 的博客 http://www.cnblogs.com/kelvin19840813/ 您的支持是对博主最大的鼓励,感谢您的认真阅读.本文版权归作者所有,欢迎转载,但请保留该 ...

  10. 架构师养成记--19.netty

    一.Netty初步 为什么选择Netty? 和NIO比较,要实现一个通信要简单得很多,性能很好.分布式消息中间件.storm.Dubble都是使用Netty作为底层通信. Netty5.0要求jdk1 ...