2017-05-07 15 views
1

エリクサー列挙、フィルタおよびグループ

[["A","B","foo"],["A","B","bar"],["A","B","baz"],["C","D","foobar"],["C","D","bla"],["E","F","blabla"]] 

を変換するためのエリクサーで最もエレガントな方法です何:

[["A","B","foo","bar","baz"],["C","D","foobar","bla"],["E","F","blabla"]] 

基本的に私は、最初の2つの要素により、入力リストとグループを反復処理したいです。

答えて

2

は私がEnum.take(2)、その後flat_mapでグループをいただきたいEnum.drop(2)各グループ:

[["A","B","foo"],["A","B","bar"],["A","B","baz"],["C","D","foobar"],["C","D","bla"],["E","F","blabla"]] 
|> Enum.group_by(&Enum.take(&1, 2)) 
|> Enum.map(fn {key, value} -> 
    key ++ Enum.flat_map(value, &Enum.drop(&1, 2)) 
end) 
|> IO.inspect 

出力:入力リストの任意の項目がある場合はこれも動作することを

[["A", "B", "foo", "bar", "baz"], ["C", "D", "foobar", "bla"], 
["E", "F", "blabla"]] 

注> 3要素。その場合には、それはちょうどそれらをCONCATます:

[["A","B","foo","z","zz"],["A","B","bar"],["A","B","baz"],["C","D","foobar"],["C","D","bla"],["E","F","blabla"]] 

意志出力:

[["A", "B", "foo", "z", "zz", "bar", "baz"], ["C", "D", "foobar", "bla"], 
["E", "F", "blabla"]] 
+0

をはい、それは私が欲しいものexactelyです!ありがとうございました! – ctp

関連する問題