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"] #数组赋值
随机推荐
- cesium编程入门(九)实体 Entity
cesium编程入门(九)实体 Entity 在cesium编程入门(五)绘制形状提到过添加实体的方法,这一节聊一聊实体相关的一些内容: 先来看 Entity 的各个属性 id 唯一标志,如果没设置, ...
- JS-获取任意html节点属性
获取节点属性: 确定获取
- 文本相似度 余弦值相似度算法 VS L氏编辑距离(动态规划)
设置n为字符串s的长度.("我是个小仙女") 设置m为字符串t的长度.("我不是个小仙女") 如果n等于0,返回m并退出.如果m等于0,返回n并退出.构造两个向 ...
- 一次mysql调优过程
由于经常被抓取文章内容,在此附上博客文章网址:,偶尔会更新某些出错的数据或文字,建议到我博客地址 : --> 点击这里 前几天进行了一个数据库查询,比较缓慢,便查询了一下,在这里记录一下,方便 ...
- python爬虫的页面数据解析和提取/xpath/bs4/jsonpath/正则(1)
一.数据类型及解析方式 一般来讲对我们而言,需要抓取的是某个网站或者某个应用的内容,提取有用的价值.内容一般分为两部分,非结构化的数据 和 结构化的数据. 非结构化数据:先有数据,再有结构, 结构化数 ...
- HI~
我是一只来自青岛某鶸校的蒟蒻,很高兴能认识各位,本人水平有限,文章中的不足之处,希望大家不吝赐教 我的邮箱是zhenshiluosuo@gmail.com 微信clearsummerday 联系时烦请 ...
- sql语句中group by使用
group by分组函数,group by name 将查询结果按照name进行分组,相同name的记录一组,配合聚合函数,显示每个name的情况. 1,数据源 表A结构如下: CREATE TA ...
- 手把手教渗透测试人员打造.NET可执行文件
在进行渗透测试的过程中,我们有时候会希望使用可执行文件来完成某些任务.最近,我们在测试过程中拿下了一个网站,从而获得了一次发动水坑攻击的机会. 原文地址:https://www.peew.pw/blo ...
- TPshop商城 Getshell后门文件分析与复现
本文作者:i春秋签约作家——Laimooc 官网地址:http://www.tp-shop.cn/ 影响版本:TPSHOP v2.0.0 后门文件:eval-stdin.php 内容: <?ph ...
- verify验证插件的详解
使用此验证插件,我们只需要新建一个实例对象,同时传入一个json对象就行了,这里我们只传入了两个属性:checkItem和callback.下面的代码解析,我们就按照这个例子来. var verify ...