Enums 有Ruby可枚举的等价物吗?可枚举#无?长生不老药?

Enums 有Ruby可枚举的等价物吗?可枚举#无?长生不老药?,enums,elixir,Enums,Elixir,如何有效地在长生不老药中实现one?和none? 你觉得这个怎么样 defmodule MyEnum do def one?(enum, fun) do Enum.count(enum, fun) == 1 && true || false end def none?(enum, fun) do Enum.count(enum, fun) == 0 && true || false end end 用法示例: iex(6)>

如何有效地在长生不老药中实现
one?
none?

你觉得这个怎么样

defmodule MyEnum do
  def one?(enum, fun) do
    Enum.count(enum, fun) == 1 && true || false
  end

  def none?(enum, fun) do
    Enum.count(enum, fun) == 0 && true || false
  end
end
用法示例:

iex(6)> MyEnum.none?([0,0,0,0], fn(x) -> x == 1 end)
true
iex(7)> MyEnum.none?([0,0,1,0], fn(x) -> x == 1 end)
false
iex(8)> MyEnum.none?([0,1,1,0], fn(x) -> x == 1 end)
false
iex(9)> MyEnum.one?([0,1,1,0], fn(x) -> x == 1 end)
false
iex(10)> MyEnum.one?([0,1,0,0], fn(x) -> x == 1 end)
true
iex(11)> MyEnum.one?([0,0,0,0], fn(x) -> x == 1 end)
false

我会使用
Stream.filter
Enum.take(2)
来实现
one?
。这将确保在
Enum.count
解决方案遍历整个枚举时,最多只遍历2个与
fun
匹配的元素

对于
无?
,您只需返回
!Enum.any?(…)

输出:

true
false
false
false
true
false

我会使用
Stream.filter
Enum.take(2)
来实现
one?
。这将确保在
Enum.count
解决方案遍历整个枚举时,最多只遍历2个与
fun
匹配的元素

对于
无?
,您只需返回
!Enum.any?(…)

输出:

true
false
false
false
true
false
模块已经有了,正如Dogbert所说(我把它放在这里作为参考链接)

此外,这里还有一种奇特的方法,用于
one?
,它的性能肯定比
Enum.take(2)
差得多,但仍然很有趣(使用理解):

“*”==对于元素e==1结束。(元素),插入:”,执行:“*”
模块已经有了,正如Dogbert所说(我把它放在这里作为参考链接。)

此外,这里还有一种奇特的方法,用于
one?
,它的性能肯定比
Enum.take(2)
差得多,但仍然很有趣(使用理解):

“*”==对于元素e==1结束。(元素),插入:”,执行:“*”

Stream.filter |>Enum.take(2)
非常非常优雅。
Enum.none?
应该存在:(就像
除非
枚举.拒绝
如果
枚举.过滤器
Stream.filter |>Enum.take(2)
非常优雅。
Enum.none?
应该存在。)(就像
除非
枚举.拒绝
如果
枚举.筛选
一起执行一样。)and@dogbert有很多好的长生不老药信息被传播!谢谢大家!@OnorioCatenacci我不确定是否应该把它作为一个答案,现在我不是了。谢谢你们温暖的话语。在你们之间and@dogbertT这里有很多很好的长生不老药信息被传播!谢谢大家!@OnorioCatenacci我怀疑我是否应该把它作为一个答案,现在我不是了。谢谢你们热情的话语。
"*" == for elem <- [0,1,1,0], fn e -> e == 1 end.(elem), into: "", do: "*"