【问题标题】:How to check if the elements of an array are in sequential order in elixir如何在长生不老药中检查数组的元素是否按顺序排列
【发布时间】:2021-03-19 19:47:11
【问题描述】:

我想知道一个数组的元素在elixir中是否按顺序排列。到目前为止我所拥有的

arr=[4,2,3,1]
arr2=[3,8,1,7]


Enum.each arr2, fn(x) ->

end

如果它是按顺序打印的,我想打印 true。在这种情况下,这是正确的,因为 arr1 是按顺序排列的。 Arr2 将打印 false,因为它不是按顺序排列的。我一直在努力解决这个问题,因为长生不老药中没有循环。

【问题讨论】:

  • Enum.each/2 是一个迭代器,返回:ok。无法从中检索任何信息,其唯一目的是迭代以产生副作用。
  • 我很困惑。 “因为 arr1 是按顺序排列的”。没有arr1。也许你的意思是arr?但是根据我所知道的任何定义,4,2,3,1 都不是连续的。请澄清您所说的顺序是什么意思。

标签: elixir


【解决方案1】:

试试这个

Enum.sort(mylist) == mylist

【讨论】:

  • 如果有一个像arr=[4,2,3,1]这样的数组就不行了,虽然它不是按顺序排列的,但它是随机顺序排列的
  • 此解决方案可以轻松扩展以支持逆序:Enum.sort(mylist) == mylist or Enum.sort(mylist) == Enum.reverse(mylist)
  • @compscigirl 我的建议是扩展我建议的递归解决方案here 来训练自己进行递归。复习答案对学习没有多大帮助,但编写代码却可以。
【解决方案2】:

您可以通过编写自己的短递归函数来处理它,即:

  def check([_x]), do: true
  def check([head | tail]) do
    if head < hd(tail), do: check(tail),
    else: false
  end

我很确定它甚至可以做得比这更短/更容易 :) 只需在其中传递您的列表(请记住 Elixir 中没有数组):

list1 = [1,2,3,1,5]
list2 = [1,2,3,4,5]

iex()> check(list1)
false

iex()> check(list2)
true

但是,正如 Aleksei 在其中一个 cmets 中所写 - 尝试自己解决这样的难题非常有益;)我建议在 codewars 上玩 Elixir :) 祝你好运!

PS

如果您需要我的实现的解释,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多