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"] #数组赋值
随机推荐
- WM_COPYDATA+BHO+Qt实现进程间通信
最近项目有一个需求:点击网页上某个按钮,通知Qt客户端.网页相关操作使用了BHO,BHO与Qt通信通过WB_COPYDATA,为什么这么麻烦呢,因为项目正好用到了BHO,可能还有其他方式,能直接通过网 ...
- django def validate_column和validate
VIewDemo class RegUserSet(mixins.CreateModelMixin,viewsets.GenericViewSet): serializer_class = RegUs ...
- Asp.NetCore取配置信息
本文简单介绍Asp.NetCore取自定义配置信息的方法,要取配置信息首先得有配置文件. 1, 本例新建了一个TimeOut.json配置文件,和其对应的一个TimeOut类 2, 首先在Startu ...
- WinForm 窗体应用程序(初步)之三
进程: 进程,简单的说,就是让你的程序启动另一个程序. 1.Process.Start("calc");//启动计算器 弊端:只认识系统自带的程序,如果写错系统会崩溃. 2. // ...
- bash shell & 环境变量
root是没有~/.bashrc的,只. /etc/profile即可,/etc/profile和~/.bashrc的作用类似,只是作用域不同,都是写死的export,也有动态的脚本去设置命令和环境变 ...
- Polynomial ( Arithmetic and Algebra) CGAL 4.13 -User Manual
1 Fundamentals A polynomial is either zero, or can be written as the sum of one or more non-zero ter ...
- pod-infrastructure:latest镜像下载失败
报错一:image pull failed for registry.access.redhat.com/rhel7/pod-infrastructure:latest, this may be be ...
- C#读入整数
// ClassLibrary1.h #include<iostream> #pragma once using namespace System; namespace ClassLibr ...
- php实现socket简单的例子
一.Socket简介 1.socket只不过是一种数据结构 2.使用这个socket数据结构去开始一个客户端和服务器之间的会话 3.服务器是一直在监听准备产生一个新的会话.当一个客户端连接服务端,它就 ...
- java学习笔记—国际化(41)
国际化:internationalization即I18N. 举例: 本科高校的网站,一般的都有中文和英文两种页面风格.因此将这种根据不同用户群体显示不同的页面风格的方式称之为页面的国际化. 翻译 V ...