Ruby(3):基本语法中
字符串分割成数组:
可以使用先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):基本语法中的更多相关文章
- ruby之基础语法
ruby语法之哈希 =>相当于python的字典 ruby语法之数组 =>相当于python的列表 举例: gitaly= Hash.new #建立新Hash类型 gitaly['firs ...
- C#语法中一个问号(?)和两个问号(??)的运算符是什么意思?
(1).C#语法中一个个问号(?)的运算符是指:可以为 null 的类型. MSDN上面的解释: 在处理数据库和其他包含不可赋值的元素的数据类型时,将 null 赋值给数值类型或布尔型以及日期类型的功 ...
- C#语法中一个问号(?)和两个问号(??)的运算符
(1).C#语法中一个个问号(?)的运算符是指:可以为 null 的类型. MSDN上面的解释: 在处理数据库和其他包含不可赋值的元素的数据类型时,将 null 赋值给数值类型或布尔型以及日期类型的功 ...
- 【原创】6. 在MYSQL++中实现SQL语法中的NULL
这次要说明的是在MYSQL++中为了实现SQL中的NULL而做出的一系列的举措.我的感觉是Null<T, B>类型通常出现在SSQLS和template Query中比较多. 1. 什么是 ...
- Ruby(或cmd中)输入命令行编译sass
Ruby(或cmd中)输入命令行编译sass步骤如下: 举例: 1.在F盘中新建一个总文件夹,比如test文件夹,其中在该文件夹下面建立html.images.js.sass等文件夹. 2.在sass ...
- ruby for in 循环中改变i的值无效
ruby for in 循环中改变i的值无效 for j in 1..5 puts "#{j}hehe" j = j + 2 #break end 在循环中,使用j = j + 2 ...
- C++ 炼气期之基本结构语法中的底层逻辑
1. 前言 从语言的分类角度而言,C++是一种非常特殊的存在.属于高级语言范畴,但又具有低级语言的直接访问硬件的能力,这也成就了C++语言的另类性,因保留有其原始特性,其语法并不象其它高级语言一样易理 ...
- Razor语法中绑定一个值给checkbox
在ASP.NET MVC开发中,需要绑定一个值给checkbox标签,如下面写法,它们运行时是没有问题,照样能跑. 看看上面的语法,在绑定时,它却出现绿浪线.提不绑定的值is not a valid ...
- Ruby的基本语法-数组
Ruby中数组的实例 1.color=["Red", "Green" ,"Blue"] #数组赋值
随机推荐
- oracle 11gr2 2.04 em 更改 hostname 后无需重建资料库的方法
1) 备份删除$ORACKE_HOME/ xxxx-sid 的EM目录:复制要创建的xxx-sid EM 名称目录: 备份删除$ORACKE_HOME/oc4j/j2ee/ xxxx-sid 的EM目 ...
- ADO.NET操作SQL Server:数据库操作类(未封装)
1.添加数据 /// <summary> /// 添加数据 /// </summary> /// <param name="newEntity"> ...
- 不用外部插件启用u盘ntfs写功能
mac下启用NTFS u盘读写功能. 不用要任何外部插件,其实mac本来就支持,只是因为专利原因隐藏了而已. macbook:~ uwe$ sudo umount /Volumes/UNTITLED ...
- 「CodeChef - SKIRES」Ski Resort
题目链接 戳我 \(Description\) 给你一个\(n*m\)的网格,以及网格上的两个格子\(A,B\).每个格子有一个高度.每次操作可以选择一个格子(不能是\(A\)或\(B\))并将它的高 ...
- mysql--对库,表基本操作语句,增删改查
1.对数据库的操作 1.选择数据库 USE 数据库名 2.创建数据库 create database 数据库名 charset utf8; 可以由字母.数字.下划线.@.#.$ 区分大小写 唯一性 不 ...
- ClamAV学习【8】——64位Windows7下编译运行实践
之前用SourceInsight静态分析了ClamAV引擎源码,现在打算开始动态研究下.不过出师不利,一开始就遇到纠结的问题,能力还有待提高. 从官网下了一个VS2005工程的源码包(http://d ...
- JavaWeb -jsp文件和内置对象的解析
jsp文件和内置对象的解析 对page解析 JSP九大内置对象(自带,无需new) 1 out:输出对象 2 request:请求对象,存储“客户端像服务端发送的请求信息” 3 response:响应 ...
- PHP中关于foreach的笔试题
1,php与C++的不同之处是PHP中变量没有局部作用域,只有函数作用域和全局作用域.如下函数,在php中,$name的作用域是函数test():在C++中$name的作用域是for循环体,for循环 ...
- 干货 | 精选《SQL注入、渗透、反病毒》学习总结集锦给你们~
学到手的都是本事,如果觉得对你有帮助也欢迎分享给身边的基友们吧! 分享干货,手留余香哦~ 本次“开学季拜师活动”的徒弟们在师父的精心指导下,在短短5天内得到了迅速地成长,以前或当时遇到的问题都能够柳暗 ...
- [Objective-C语言教程]类别(28)
有时,可能会发现希望通过添加仅在某些情况下有用的行为来扩展现有类. 要向现有类添加此类扩展,Objective-C提供了类别和扩展. 如果需要向现有类添加方法,或许为了添加功能以便在应用程序中更容易地 ...