Project1
标题: 请教!self.state?(1)&&!self.state?(2)&&!self.state?(3)数组的写法 [打印本页]
作者: taeckle 时间: 2020-1-10 00:17
标题: 请教!self.state?(1)&&!self.state?(2)&&!self.state?(3)数组的写法
本帖最后由 taeckle 于 2020-1-10 00:21 编辑
"if user.state?(1) or user.state?(2) or user.state?(3) or user.state?(4)" 还可以这么写: "if [1,2,3,4].any?{|i| user.state?(i)}"
那要是"if !self.state?(1) && !self.state?(2) && !self.state?(3)" 用个数组[1,2,3]该怎么写呢?
作者: SixRC 时间: 2020-1-10 01:19
本帖最后由 SixRC 于 2020-1-10 16:18 编辑
1.可以用 all? 这个方法啊 和 any? 相通
2.这两个语义相反 所以 not any = all not
然后 你把上面的结果取反也可以吧
1. all not
[1,2,3].all? {|i| !self.state(i) }
[1,2,3].all? {|i| !self.state(i) }
2. not any
! [1,2,3].any? {|i| self.state(i) }
! [1,2,3].any? {|i| self.state(i) }
作者: taeckle 时间: 2020-1-10 09:20
那要怎么写呢。。有点晕啊。。
作者: KB.Driver 时间: 2020-1-10 10:06
本帖最后由 KB.Driver 于 2020-1-10 10:08 编辑
if !self.state?(1) && !self.state?(2) && !self.state?(3)
if !self.state?(1) && !self.state?(2) && !self.state?(3)
等价于
if [1, 2, 3].all?{|i| !self.state?(i) }
if [1, 2, 3].all?{|i| !self.state?(i) }
或者这样写
if !self.states.any?{|s| [1, 2, 3].inlcude?(s) }
if !self.states.any?{|s| [1, 2, 3].inlcude?(s) }
作者: ppspssss 时间: 2020-1-11 15:28
本帖最后由 ppspssss 于 2020-1-11 15:31 编辑
如果使用for循環, 用邏輯來造的雖然比較長,但應該可以詳細一点,方便修改及日后維護(对于我來說), 如果上方的方法雖然速度快 , 但还是不建議新手用
- a = [1,2,3]
- 包含 = 0 #建一个局部變量,用于計數
- for i in 0..a.size
- n = a[i] #建个局部變量等于a數組中第i个的變量
- if self.state?(n) #如果包含这个變量(狀態值)
- 包含+=1 #如果包含了的話,計數加一個
- end #if結束
- end #for結束
- if 包含 >0
- #其中一种的情況
- end
- if 包含 == a.size
- #其中全部种的情況
- end
复制代码
作者: 灯笼菜刀王 时间: 2020-1-11 16:24
本帖最后由 灯笼菜刀王 于 2020-1-11 16:34 编辑
if (self.states & [1,2,3,4]).size == 3
F1搜索关键词: 交集
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |