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
RUBY 代码复制
  1. [1,2,3].all? {|i| !self.state(i) }

2. not any
RUBY 代码复制
  1. ! [1,2,3].any? {|i| self.state(i) }

作者: taeckle    时间: 2020-1-10 09:20
SixRC 发表于 2020-1-10 01:19
1.可以用 all? 这个方法啊 和 any? 相通
2.这两个语义相反 所以 not any = all not
   然后 你把上面的结果 ...

那要怎么写呢。。有点晕啊。。
作者: KB.Driver    时间: 2020-1-10 10:06
本帖最后由 KB.Driver 于 2020-1-10 10:08 编辑

RUBY 代码复制
  1. if !self.state?(1) && !self.state?(2) && !self.state?(3)

等价于
RUBY 代码复制
  1. if [1, 2, 3].all?{|i| !self.state?(i) }




或者这样写
RUBY 代码复制
  1. if !self.states.any?{|s| [1, 2, 3].inlcude?(s) }


作者: ppspssss    时间: 2020-1-11 15:28
本帖最后由 ppspssss 于 2020-1-11 15:31 编辑

如果使用for循環, 用邏輯來造的雖然比較長,但應該可以詳細一点,方便修改及日后維護(对于我來說), 如果上方的方法雖然速度快 , 但还是不建議新手用

  1. a = [1,2,3]
  2. 包含 = 0 #建一个局部變量,用于計數
  3. for i in 0..a.size
  4. n = a[i] #建个局部變量等于a數組中第i个的變量
  5. if self.state?(n) #如果包含这个變量(狀態值)
  6. 包含+=1 #如果包含了的話,計數加一個
  7. end #if結束
  8. end #for結束
  9. if 包含 >0
  10. #其中一种的情況
  11. end
  12. if 包含 == a.size
  13. #其中全部种的情況
  14. 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