Ruby知识总结

Stella981
• 阅读 494

ruby入门掌握其实很简单,下面对我司主要使用的部分入门做一个简单的归纳总结: 本文的文章结构: 1、变量 2、操作符 3、ifelseend 、unless 4、数组(Array) 5、哈希(Hash) 6、循环(each do|变量|)

                                                                                                                                                                             1、变量

变量分为:整数型(int);浮点型(float);布尔型(bool);字符串型(string)

int型:1,2,3 float型:1.2 bool型:true/ false string型:"abc"

不同类型间的转换: .to_f :转为浮点型 .to_s:转为字符串型 例如 p 123.to_s =>"123"

变量分为:全局变量($),局部变量和类变量(@@),它们的作用范围由大到小排列

                                                                                                                                                                                  2、对于变量而言含有的操作符

对于int和float,_为倍数相乘,但是对于字符串,即为重复几次,例如: str1 = "a" p str1_3
=>"aaa" 对于字符串,+也有特殊意义,为字符串间的简单拼接 ②|| 或(一真全真)、&&且(一假全假) 、!非 (特别注意 nil为假) ③三目操作符: 口?口:口 问号前面的是布尔型的判断,true的话执行第二个方块的语句,false的话执行第三个方块的语句 例如: value =(nil ? 0 : 1) p value =>1 ⑤== 表示判断,两侧是否相等,相等为true,不相等为false 3、if语句的基本知识 if elseend 不要丢掉end哦!!! 例如: num = 100 if num <100 p "数字小于100" elsif num >100 #elsif 后面还是可以加判断条件的 p "数字大于100" else #else 就是指其他的,后面不能再加判断条件 p "数字等于100" end

=> "数字等于100"

if还能这样用: num = 100 p "数字等于100" if num =100 #if后面的判断为真后,再去执行前面的语句 => "数字等于100"

与if一样同为判断的还有一个方式:unless 用法就是unless后面的条件不成立,才会执行下一条语句,否则就跳到下一个判断,因为逻辑比较绕,所以一般多于1个判断的时候,就直接用if好了。

例如: num = 50 p "数字小于100" unless num>100

                                                                                                                                                                                4、数组的基础知识及方法

数组(Array) 创建一个新的数组可以这样:arr = Array.new ,或者直接定义一个空的数组 :arr = [ ],这个中括号就是数组的标志。 ①最重要的知识点就是 索引,就是数组所在的位置,它是有序的,在物理磁盘按照顺序存储,它跟python一样,都是从0开始计数 arr = [1,2,3,4,5] p arr[0] =>"1" #拿出来一个元素,不是数组哦 p arr[-1] #取倒数第一个元素 =>"5" ②数组内的操作符: 加号(+)单纯的将两个数组连接,不做去重; 减号(-)用前一个数组减去后一个数组里的东西,只对被减数做修改; 取并集“|”(可以看到,比对于变量的操作,少了一个竖杠); 取交集“&”(可以看到,比对于变量的操作,少了一个&); 数组间的拼接: “<<” 这个字符的意思是拼接,并不是将两个数组简单的拼接起来,这跟字符串中的用法不一样,它是把箭头后面的元素作为一个新的元素加到左边的数组里面去。 例如: 数组1 = ['1','2','3'] 数组2 = ['1','3','4'] p 数组1 - 数组2 =>["2"] p 数组1 + 数组2 =>["1", "2", "3", "1", "3", "4"] p 数组1 | 数组2 #数组里的取并集,是一个竖杠"|",而变量里面是"||" =>["1", "2", "3", "4"] p 数组1 & 数组2 #你看,数组里的取交集,是一个& =>["1", "3"]

例如: p ['1','2','3']<<["aaa"] => ['1','2','3',['aaa']]

方法: .empty? #判断是否为空,输出结果为布尔型 a = ["a","b","c"] p a.empty? =>false

.include?("变量") #判断是否含有某元素,输出结果为布尔型 a = ["a","b","c"] p a.include?("c") =>true

.index("元素") #寻找某个元素的索引 a = ["a","b","c"] p a.index("c") =>2

.size #查询数组的长度 a = ["a","b","c"] p a.size =>3

                                                                                                                                                                            5、哈希的基础知识和方法

创建一个新的哈希可以这样:hash = Hash.new ,或者直接定义一个空的哈希 :hash = {},这个中括号就是哈希的标志。 哈希是以键值对的形式存在的,表达方式有2种,我司常用的是{“a”=>“b”}形式,一个key可对应多个value,它们是在物理地址是不连续的,所以没有索引的说法,而是通过key去查找对应的value,效率会高于数组。这个哈希其实就相当于python里的字典。 所以定位哈希的时候,是用key去定位的,hash[key ],例如: hash= {"a"=>"b","c"=>"d"} p hash["c"] =>"d"

下面简列一下hash的方法: empty? #判断是否为空,输出结果为布尔型 a = {} p a.empty? =>true

.include?("value") #判断是否含有某元素,输出结果为布尔型 hash= {"a"=>"b","c"=>"d"} p hash.include?("f") =>true

.size #查询哈希的个数,记住,是以键(keys)为标准 hash= {"a"=>"b","c"=>"d"} p hash.size p=>2

.keys #这个方法是将哈希里的所有键取出来,组成1个数组 hash= {"a"=>"b","c"=>"d"} p hash.keys =>["a", "c"]

.value #这个方法是将值取出来,组成一个数组 hash= {"a"=>"b","c"=>"d"} p hash.values =>["b", "d"]

另外,哈希里面的value,不一定是字符串,还有可能是数组,例如: hash= {"a"=>["b","e"],"c"=>"d"},这样都是允许的,如果我想定位到元素“e”,很简单,如下操作就可以: p hash["a"][1] =>"e" 6、循环 循环首先简单介绍三种方式:请记住都有end作为结尾哦!~并且这里面的变量并没有用""引号给引起来 ①.each do |命名变量| ...
end ②.each_with_index do |元素,索引| #这里命名变量,是2个变量。应用于数组,将数组的元素拿出来,并将其位置表示出来.特别需要注意的是,这里面的变量并没有用""引号给引起来 p 元素 p 索引+1
end ③0.upto (n) do |命名变量| #这个方法可以用来将数组(array)进行循环,且n>=0,当然,那个0也不是固定值,看你需要定位到哪个元素。而且既然有upto,当然也就有downto,这个不多说。记得凡是方法,都有".";中间都有空格!! ...
end 现在举几个例子熟悉一下: 对于数组的循环,取出里面的所有元素,举例如下:

arr = ["a", "b", "c"] arr.each do |元素| p 元素 end =>"a" "b" "c"

arr = ["a", "b", "c"] arr.each_with_index do |元素,索引| p 元素 p 索引+1 end =>"a" 1 "b" 2 "c" 3

arr = ["a", "b", "c"] 0.upto (2) do |索引| p arr[索引] end

=>"a" "b" "c"

对于哈希的循环,一种就是将每一个的key-value组成一个数组,并将其输出。例如:

hash= {"a"=>["b","e"],"c"=>"d","dada"=>[1,2,3]} hash.each do |内容| p 内容 end

=>["a", ["b", "e"]] ["c", "d"] ["dada", [1, 2, 3]]

如果针对上面的哈希,我想要输出形成的数组的特定值,比如第一个元素:

hash= {"a"=>["b","e"],"c"=>"d","dada"=>[1,2,3]} hash.each do |内容| p 内容[0] end =>"a" "c" "dada"

hash= {"a"=>["b","e"],"c"=>"d","dada"=>[1,2,3]} hash.each do |内容| p 内容[1][0] end =>["b", "e"] "d" [1, 2, 3]

hash= {"a"=>["b","e"],"c"=>"d","dada"=>[1,2,3]} hash.each do |内容| p 内容[1][1] end =>"e" nil #由此可以看出,当索引超出了数组的长度时,不会报错,而是nil 2

另一种就是输出键“\n”值,但不组成数组,用的是.each do|键,值|,例如:

hash= {"a"=>["b","e"],"c"=>"d","dada"=>[1,2,3]} hash.each do |键,值| =>p 键 p 值 end

相信通过上面的简要介绍,对于ruby语法的基础是有了,继续加油更新哦~~

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这