字符串分割成数组:
可以使用先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. cesium编程入门(九)实体 Entity

    cesium编程入门(九)实体 Entity 在cesium编程入门(五)绘制形状提到过添加实体的方法,这一节聊一聊实体相关的一些内容: 先来看 Entity 的各个属性 id 唯一标志,如果没设置, ...

  2. JS-获取任意html节点属性

    获取节点属性:   确定获取

  3. 文本相似度 余弦值相似度算法 VS L氏编辑距离(动态规划)

    设置n为字符串s的长度.("我是个小仙女") 设置m为字符串t的长度.("我不是个小仙女") 如果n等于0,返回m并退出.如果m等于0,返回n并退出.构造两个向 ...

  4. 一次mysql调优过程

    由于经常被抓取文章内容,在此附上博客文章网址:,偶尔会更新某些出错的数据或文字,建议到我博客地址 :  --> 点击这里 前几天进行了一个数据库查询,比较缓慢,便查询了一下,在这里记录一下,方便 ...

  5. python爬虫的页面数据解析和提取/xpath/bs4/jsonpath/正则(1)

    一.数据类型及解析方式 一般来讲对我们而言,需要抓取的是某个网站或者某个应用的内容,提取有用的价值.内容一般分为两部分,非结构化的数据 和 结构化的数据. 非结构化数据:先有数据,再有结构, 结构化数 ...

  6. HI~

    我是一只来自青岛某鶸校的蒟蒻,很高兴能认识各位,本人水平有限,文章中的不足之处,希望大家不吝赐教 我的邮箱是zhenshiluosuo@gmail.com 微信clearsummerday 联系时烦请 ...

  7. sql语句中group by使用

    group by分组函数,group by name 将查询结果按照name进行分组,相同name的记录一组,配合聚合函数,显示每个name的情况.   1,数据源 表A结构如下: CREATE TA ...

  8. 手把手教渗透测试人员打造.NET可执行文件

    在进行渗透测试的过程中,我们有时候会希望使用可执行文件来完成某些任务.最近,我们在测试过程中拿下了一个网站,从而获得了一次发动水坑攻击的机会. 原文地址:https://www.peew.pw/blo ...

  9. TPshop商城 Getshell后门文件分析与复现

    本文作者:i春秋签约作家——Laimooc 官网地址:http://www.tp-shop.cn/ 影响版本:TPSHOP v2.0.0 后门文件:eval-stdin.php 内容: <?ph ...

  10. verify验证插件的详解

    使用此验证插件,我们只需要新建一个实例对象,同时传入一个json对象就行了,这里我们只传入了两个属性:checkItem和callback.下面的代码解析,我们就按照这个例子来. var verify ...