首页 > 解决方案 > Elixir 计算元组的总和

问题描述

我有一些代码需要计算在 a 中返回的sum那些。我怎么能做到这一点?tupleslist

def calc_points(hand) do
    Enum.map(hand, fn x -> String.at(x,0) end)
    |> Enum.map( fn x ->
      cond do
      x == "J" -> {2}
      x == "Q" -> {3}
      x == "K" -> {4}
      x == "A" -> {1}
      true -> case Integer.parse(x) do
        {num, ""} -> {num}
        {_, rest} -> {:error, :unparsable}
        {:error} -> {:error, :unparsable}
      end
      end
    end)
  end

input价值是["6 of spades", "6 of suites"]output我得到这个代码是[{6}, {6}]。我怎么能把这个值加起来到 12?使用我已经拥有的代码?还是需要重构代码?

标签: elixir

解决方案


我最终将{num, ""} -> {num}行更改为{num, ""} -> num 那样,它返回了一个list值,我最终使用|>Enum.sum()来计算sum

编辑 2

我最终得到了这个代码解决方案

 def calc_points(hand) do
    Enum.map(hand, fn x -> String.split(x) end)
    |> Enum.map(fn x -> Enum.at(x, 0) end)
    |> Enum.map( fn x ->
      cond do
        x == "J" -> 2
        x == "Q" -> 3
        x == "K" -> 4
        x == "Ace" -> 1
        true -> case Integer.parse(x) do
          {num, ""} -> num
          {_, rest} -> {:error, :unparsable}
          {:error} -> {:error, :unparsable}
        end
      end
    end)
    |> Enum.reduce(0,fn x,acc when is_number(x) ->
      x+acc
      _, acc -> acc
    end)
  end

推荐阅读