<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jan 28, 2016 at 8:22 AM, Khitai Pang <span dir="ltr"><<a href="mailto:khitai.pang@outlook.com" target="_blank">khitai.pang@outlook.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">For string concatenation, which one of the following is the most efficient?</blockquote></div><br></div><div class="gmail_extra">Ask eministat, but note that the A ++ B ++ C is probably recognized by the compiler as dead code, so we might be checking a loop here. Another note is that a single invocation has no measurable difference, so unless you are doing millions of these, it doesn't matter.<br><br></div><div class="gmail_extra">Code and output follows. The ++ variant is fastest followed by the lists:append followed by the string:concat. But there is a lot of outlier variance in these measurements which suggest it is highly affected by outside factors. Don't put too much into these numbers and their precision as there is a lot of variance in runtime.<br><br></div><div class="gmail_extra">-----<br>-module(concat).<br><br>-export([t/0, datasets/0]).<br><br>c1(Items) -> c1(Items, 10000).<br><br>c1(_, 0) -> ok;<br>c1(Items, K) -><br>    string:join(Items, ""),<br>    c1(Items, K-1).<br><br>c2(Items) -> c2(Items, 10000).<br><br>c2(_, 0) -> ok;<br>c2(Items, K) -><br>    lists:append(Items),<br>    c2(Items, K-1).<br><br>c3(Items) -> c3(Items, 10000).<br><br>c3(_, 0) -> ok;<br>c3([A,B,C] = Is, K) -> <br>    _ = A ++ B ++ C,<br>    c3(Is, K-1).<br><br>datasets() -><br>    ItemID = "123134-123-12313-1--123-1231-",<br>    Input = ["Item:{", ItemID, "}"],<br>    [eministat:s("++",<br>                 fun() -><br>                         c3(Input)<br>                 end, 50),<br>     eministat:s("strings:join/1",<br>                 fun() -><br>                         c1(Input)<br>                 end, 50),<br>     eministat:s("lists:append",<br>                 fun() -><br>                         c2(Input)<br>                 end, 50)].<br><br>t() -><br>    [H | T] = datasets(),<br>    eministat:x(95.0, H, T).<br>--------------<br><br>18> concat:t().<br>x ++<br>+ strings:join/1<br>* lists:append<br>+--------------------------------------------------------------------------+<br>|x xx   x  xxxxx+++****x   *+ ***x +** + +*+ ++ +++++++++++  xx      +    +|<br>|       x  xx xxxx*** *     x ****  *      + +  + +   ++++                 |<br>|       x  x  xxxx*** *       ****           +        ++++                 |<br>|       x     xxx ***         ***            +        ++++                 |<br>|       x     xxx * *         ***            +         +++                 |<br>|       x      x  *             *                      +++                 |<br>|              x  *                                    + +                 |<br>|              x  *                                    + +                 |<br>|              x  *                                      +                 |<br>|    |_________MA__________|                                               |<br>|                                             |______A_M____|              |<br>|                  |______AM_____|                                         |<br>+--------------------------------------------------------------------------+<br>------<br><br>Dataset: x N=50 CI=95.0000<br>Statistic     Value     [         Bias] (Bootstrapped LB‥UB)<br>Min:            1404.00<br>1st Qu.         1730.00<br>Median:         1803.00<br>3rd Qu.         1844.00<br>Max:            3180.00<br>Average:        1844.26 [   6.50820e-2] (      1778.54 ‥       1967.80)<br>Std. Dev:       320.492 [     -13.6930] (      177.997 ‥       502.461)<br><br>Outliers: 3/6 = 9 (μ=1844.33, σ=306.799)<br>        Outlier variance:      0.852347 (severe, the data set is probably unusable)<br><br>------<br><br>Dataset: + N=50 CI=95.0000<br>Statistic     Value     [         Bias] (Bootstrapped LB‥UB)<br>Min:            2339.00<br>1st Qu.         2779.00<br>Median:         2965.00<br>3rd Qu.         3017.00<br>Max:            3523.00<br>Average:        2903.64 [  -1.28160e-2] (      2847.28 ‥       2959.10)<br>Std. Dev:       200.957 [     -3.90939] (      159.507 ‥       269.636)<br><br>Outliers: 1/1 = 2 (μ=2903.63, σ=197.048)<br>        Outlier variance:      0.483689 (moderate)<br><br>Difference at 95.0% confidence<br>        1059.38 ± 106.139<br>        57.4420% ± 5.75510%<br>        (Student's t, pooled s = 267.487)<br>------<br><br>Dataset: * N=50 CI=95.0000<br>Statistic     Value     [         Bias] (Bootstrapped LB‥UB)<br>Min:            1841.00<br>1st Qu.         1927.00<br>Median:         2158.00<br>3rd Qu.         2300.00<br>Max:            2586.00<br>Average:        2125.90 [    -0.186946] (      2070.88 ‥       2184.36)<br>Std. Dev:       206.241 [     -2.58143] (      189.011 ‥       239.516)<br><br>Outliers: 0/0 = 0 (μ=2125.71, σ=203.660)<br>        Outlier variance:      0.645536 (severe, the data set is probably unusable)<br><br>Difference at 95.0% confidence<br>        281.640 ± 106.934<br>        15.2712% ± 5.79820%<br>        (Student's t, pooled s = 269.491)<br>------<br><br>ok<br>19><br></div><div class="gmail_extra"><br clear="all"><br>-- <br><div class="gmail_signature">J.</div>
</div></div>