2017-01-05 10 views
3

に一覧表示するには、ネストされたタプルを変換:がやろうとしエリキシル

def nested_tuple_to_list(tuple) when is_tuple(tuple) do 
    ... 
end 

が得ることを期待:

iex> example = {"foo", "bar", {"foo", "bar"}} 
    iex> example_as_list = nested_tuple_to_list(example) 
    iex> example_as_list 
    ["foo", "bar", ["foo", "bar"]] 

私の質問は何であるか、これを行うための最良の方法ですか?

答えて

1

これと他の多くのネストされたデータの変換を行うことができるライブラリがあります。

iex(1)> h PhStTransform.transform 

     def transform(data_structure, function_map, depth \\ []) 

任意のエリクサーdata structureを変換するために与えられたfunction_mapを使用しています。

function_mapには、 に変換されるデータ型に対応するキーが含まれている必要があります。各キーは、そのデータ型とオプションで深さリストを引数として持つ関数にマップする必要があります。

depthは、内部再帰を目的としているため、常にデフォルト値のままにしてください。

iex> atom_to_string_potion = %{ Atom => fn(atom) -> Atom.to_string(atom) end } 
iex> PhStTransform.transform([[:a], :b, {:c, :e}], atom_to_string_potion) 
[["a"], "b", {"c", "e"}] 

iex> foo = {"foo", "bar", {"foo", "bar"}} 
{"foo", "bar", {"foo", "bar"}} 

iex> PhStTransform.transform(foo, %{Tuple => fn(tuple) -> Tuple.to_list(tuple) end}) 
["foo", "bar", ["foo", "bar"]] 

https://hex.pm/packages/phst_transform

3

使用Tuple.to_list/1とは、同じ機能を持つ結果のリストをマップし、非組の入力のためのフォールバック句を追加します。

defmodule A do 
    def nested_tuple_to_list(tuple) when is_tuple(tuple) do 
    tuple |> Tuple.to_list |> Enum.map(&nested_tuple_to_list/1) 
    end 
    def nested_tuple_to_list(x), do: x 
end 

{"foo", "bar", {"foo", "bar"}} |> A.nested_tuple_to_list |> IO.inspect 

出力:あなたは内部のタプルを変換したい場合は

["foo", "bar", ["foo", "bar"]] 

リストも同様に追加できます。

def nested_tuple_to_list(list) when is_list(list) do 
    list |> Enum.map(&nested_tuple_to_list/1) 
end 

これは、次のようにマップを処理するために簡単に拡張できます。よく

関連する問題