<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="219974" data-post-id="219974">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="grangerelixx" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  grangerelixx
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thank you for the explanation. Is it possible to explain with an example? " <code>sorter</code> will apply to each element in the tuple one-by-one. But the same <code>sorter</code> applies to all elements in the tuple." I think I am not able to understand this part.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="219974" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/enum-sort-by-list-of-maps/41022/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-219974" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="219974"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #11"></div>
  </section>
</div>
    <div class="postbit" id="219975" data-post-id="219975">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="APB9785" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/APB9785/120/24101_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  APB9785
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Creator of ECSx</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Let’s say the <code>mapper</code> returns two elements in a tuple:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">&amp;{Map.fetch!(&amp;1, :post_body_size), Map.fetch!(&amp;1, :date)}
</code></pre>
<p>like</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">{4, ~D[2021-06-05]}
{4, ~D[2021-06-04]}
{5, ~D[2021-06-02]}
etc...
</code></pre>
<p>Now if the sorter is <code>&amp;&gt;=/2</code> (or <code>:desc</code>) then it will compare</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">4 &gt;= 4
4 &gt;= 5
etc...
</code></pre>
<p>But it will also use the same sorter <code>&amp;&gt;=/2</code> to compare the second elements in the tuple:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">~D[2021-06-05] &gt;= ~D[2021-06-04]
~D[2021-06-04] &gt;= ~D[2021-06-02]
</code></pre>
<p>And this does not work because you cannot use <code>&gt;=/2</code> to sort Structs (see <a href="https://hexdocs.pm/elixir/1.12/Enum.html#sort/2-sorting-structs" rel="noopener nofollow ugc">Enum.sort/2 - Sorting structs</a>).  Instead, you must use the <code>Date.compare</code> function as the <code>sorter</code> by passing the <code>Date</code> module as the third argument:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">post_list
|&gt; Enum.sort_by(&amp;{Map.fetch!(&amp;1, :post_body_size), Map.fetch!(&amp;1, :date)}, Date)
</code></pre>
<p>This is ok:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">Date.compare(~D[2021-06-05], ~D[2021-06-04])
Date.compare(~D[2021-06-04], ~D[2021-06-02])
</code></pre>
<p>But now we have the opposite problem when sorting by <code>:post_body_size</code>:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">Date.compare(4, 4)
Date.compare(4, 5)
</code></pre>
<p>This will not work because <code>Date.compare</code> expects <code>%Date{}</code> structs, not Integers.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="219975" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/enum-sort-by-list-of-maps/41022/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-219975" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="219975"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #12"></div>
  </section>
</div>
    <div class="postbit" id="219976" data-post-id="219976">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="grangerelixx" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  grangerelixx
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Makes sense. Can we not add a tuple of sorters? We do something like this here<code> Enum.sort_by(&amp;Map.fetch!(&amp;1, :post_body_size), :desc)</code> so I tried {{:desc, Date}, :desc} but this didn’t work. Is it because of the arity issue? <a href="https://github.com/elixir-lang/elixir/blob/d7f96d833235fa471a58d3cfc22c01ca38e418bf/lib/elixir/lib/enum.ex#L2918" class="inline-onebox" rel="noopener nofollow ugc">elixir/lib/elixir/lib/enum.ex at d7f96d833235fa471a58d3cfc22c01ca38e418bf · elixir-lang/elixir · GitHub</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="219976" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/enum-sort-by-list-of-maps/41022/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-219976" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="219976"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #13"></div>
  </section>
</div>
    <div class="postbit" id="219977" data-post-id="219977">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="APB9785" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/APB9785/120/24101_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  APB9785
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Creator of ECSx</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>No.  The possible options are:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">(element(), element() -&gt; boolean())
  | :asc
  | :desc
  | module()
  | {:asc | :desc, module()}
)
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="219977" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/enum-sort-by-list-of-maps/41022/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-219977" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="219977"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #14"></div>
  </section>
</div>
    <div class="postbit" id="219978" data-post-id="219978">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="grangerelixx" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  grangerelixx
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Got it, thank you so much. I got a real good understanding of this concept.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="219978" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/enum-sort-by-list-of-maps/41022/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-219978" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="219978"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-last-post cat-last-post" title="Last post!"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <span class="all-loaded">— All posts loaded —</span>
</div></template></turbo-stream>