<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On 08 Jan 2015, at 04:56, Harit Himanshu <<a href="mailto:harit.subscriptions@gmail.com" class="">harit.subscriptions@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><p style="font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; margin: 0px 0px 1em; padding: 0px; border: 0px; font-size: 14px; vertical-align: baseline; clear: both; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; line-height: 17.8048000335693px;" class=""><strong style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: transparent;" class=""><span style="line-height: 17.8048000335693px;" class="">My attempt, looks like</span></strong></p><p style="font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; margin: 0px 0px 1em; padding: 0px; border: 0px; font-size: 14px; vertical-align: baseline; clear: both; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; line-height: 17.8048000335693px;" class=""></p></div></blockquote><blockquote type="cite" class=""><pre class="" style="margin-top: 0px; margin-bottom: 10px; padding: 5px; border: 0px; font-size: 14px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; overflow: auto; width: auto; max-height: 600px; word-wrap: normal; line-height: 17.8048000335693px; background-color: rgb(238, 238, 238);"><code class="" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; white-space: inherit;">map_search_pred(Map, Pred)  ->
  M = [{Key, Value} || {Key, Value} <- <a href="maps:to_list" class="">maps:to_list</a>(Map), Pred(Key, Value) =:= true],
  case length(M) of
    0 -> {};
    _ -> lists:nth(1, M)
  end.</code></pre></blockquote>...<br class=""><blockquote type="cite" class=""><div class=""><p style="font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; margin: 0px 0px 1em; padding: 0px; border: 0px; font-size: 14px; vertical-align: baseline; clear: both; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; line-height: 17.8048000335693px;" class=""><strong style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: transparent;" class="">Problem?</strong><br class="">The problem is efficiency.<br class="">It uses list comprehension and runs for all the elements in the list. The better solution would be to return after the first match.</p><p style="font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; margin: 0px 0px 1em; padding: 0px; border: 0px; font-size: 14px; vertical-align: baseline; clear: both; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; line-height: 17.8048000335693px;" class="">As a beginner to language, I do not know a better idiomatic way to solve this, so looking for better ideas and suggestions</p></div></blockquote><br class="">You can use </div><div><br class=""></div><div>map_search_pred(Map, Pred) -></div><div>    case lists:dropwhile(fun(X) -> not Pred(X) end, <a href="maps:to_list" class="">maps:to_list</a>(Map)) of</div><div>        [Found | _] -> Found;</div><div>        [] -> false</div><div>    end.</div><div><br class=""></div><div>A few comments.</div><div><br class=""></div><div>- Using {} as a return value denoting “not found” is unusual. My version mimicks lists:keyfind/2, which returns the matching object or ‘false’.</div><div><br class=""></div><div>- Testing the length of the list using length/1 will force a count of all elements. In this case, you are only interested in checking if the list is non-empty, which is better done with a pattern-match. This also eliminates the need for calling lists:nth(1,M), which is also a more expensive option than hd(M).</div><div><br class=""></div><div>BR,</div><div>Ulf W</div><br class=""><div apple-content-edited="true" class="">
<span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px;"><div class=""><div class="">Ulf Wiger, Co-founder & Developer Advocate, Feuerlabs Inc.</div><div class=""><a href="http://feuerlabs.com" class="">http://feuerlabs.com</a></div></div><div class=""><br class=""></div></span><br class="Apple-interchange-newline">

</div>
<br class=""></body></html>