2016-10-30 7 views
0

私はこの機能を持っている:結果がブールのリストであるマップ関数内の特定の値を取り出す方法は?

​​

、言うことができます:結果は、私はの値を取得したい1「真」 が含まれていることを

[false,false,false,true,...] 

は注意:

我々の場合で

"ハロー"

です

答えて

5

あなたは真のisExists/2リターンの結果のリストを取得するためにlists:filter/2を使用することができます。

1> Headers = "hellohellohello". 
"hellohellohello" 
2> lists:filter(fun(X) -> isExists(X,Headers) end, ["h","he","hell","hello"]). 
["hello"] 

をしかし、それはリストではなく、値を返します。また、あなたはisExists/2にそれを渡した結果で、リスト内の各値をペアリングして、結果を抽出するためにlists:keyfind/3を使用するlists:map/2を使用することができます。

4> lists:keyfind(true, 1, lists:map(fun(X) -> {isExists(X,Headers), X} end, ["h","he","hell","hello"])). 
{true,"hello"} 

しかし、この代替は、複数のリストトラバーサルを必要とし、それがA返しますタプルから値を抽出する必要があります。

がおそらく最善の選択肢は、lists:foldl/3を使用することである。

3> lists:foldl(fun(X,Acc) -> case isExists(X,Headers) of true -> X; false -> Acc end end, false, ["h","he","hell","hello"]). 
"hello" 

一致する結果がない場合、この例ではfalseあるアキュムレータの初期値は、代わりに返されます。

関連する問題