<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: sum code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Fri, 25 Jul 2008 07:41:29 GMT</pubDate>
    <description>DZone Snippets: sum code</description>
    <item>
      <title>Using the XSLT sum function</title>
      <link>http://snippets.dzone.com/posts/show/4976</link>
      <description>This XML and XSLT code is an example of storing and displaying a car mileage log. Notably the XSLT sum() function displays the total no of miles.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;file: car_log.xsl&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;?xml version="1.0"?&gt;&lt;br /&gt;&lt;br /&gt;    &lt;xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"&gt;&lt;br /&gt;      &lt;br /&gt;    &lt;xsl:template match="car_log"&gt;&lt;br /&gt;      &lt;div&gt;      &lt;br /&gt;        &lt;p&gt;Total miles this month: &lt;xsl:value-of select="sum(records/entry/miles)" /&gt;&lt;/p&gt;&lt;br /&gt;        &lt;xsl:apply-templates select="records"/&gt;&lt;br /&gt;      &lt;/div&gt;&lt;br /&gt;    &lt;/xsl:template&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;xsl:template match="car_log/records/entry"&gt;&lt;xsl:variable name="pos" select="position()"/&gt;&lt;br /&gt;    &lt;div class="record"&gt;&lt;br /&gt;      &lt;dl&gt;&lt;br /&gt;        &lt;dt&gt;&lt;label for="trip"&gt;&lt;xsl:value-of select="@title"/&gt;trip&lt;/label&gt;&lt;/dt&gt;&lt;br /&gt;        &lt;dd&gt;&lt;br /&gt;          &lt;input type="text" id="trip{$pos}" name="trip{$pos}" value="{trip}" size="{@size}" /&gt;&lt;br /&gt;        &lt;/dd&gt;&lt;br /&gt;          &lt;br /&gt;        &lt;dt&gt;&lt;label for="miles"&gt;&lt;xsl:value-of select="@title"/&gt;miles&lt;/label&gt;&lt;/dt&gt;&lt;br /&gt;        &lt;dd&gt;&lt;br /&gt;          &lt;input type="text" id="miles{$pos}" name="miles{$pos}" value="{miles}" size="2" /&gt;&lt;br /&gt;        &lt;/dd&gt;&lt;br /&gt;          &lt;br /&gt;        &lt;dt&gt;&lt;label for="description"&gt;&lt;xsl:value-of select="@title"/&gt;description&lt;/label&gt;&lt;/dt&gt;&lt;br /&gt;        &lt;dd&gt;&lt;br /&gt;          &lt;input type="text" id="description{$pos}" name="description{$pos}" value="{description}"  /&gt;&lt;br /&gt;        &lt;/dd&gt;        &lt;br /&gt;      &lt;/dl&gt;&lt;br /&gt;    &lt;/div&gt;&lt;br /&gt;    &lt;/xsl:template&gt;&lt;br /&gt;    &lt;/xsl:stylesheet&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;file: car_log.xml&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;car_log&gt;&lt;br /&gt;  &lt;summary&gt;&lt;br /&gt;    &lt;project&gt;car_log&lt;/project&gt;&lt;br /&gt;  &lt;/summary&gt;&lt;br /&gt;  &lt;records&gt;&lt;br /&gt;    &lt;entry id='17962'&gt;&lt;date&gt;Wed Dec 12 20:00:33 +0000 2007&lt;/date&gt;&lt;trip&gt;trip to the supermarket&lt;/trip&gt;&lt;miles&gt;11.8&lt;/miles&gt;&lt;description&gt;my first trip with the GPS installed&lt;/description&gt;&lt;/entry&gt;&lt;br /&gt;    &lt;entry id='18024'&gt;&lt;date&gt;Fri Dec 14 11:45:09 +0000 2007&lt;/date&gt;&lt;trip&gt;driving around the park&lt;/trip&gt;&lt;miles&gt;26.1&lt;/miles&gt;&lt;description/&gt;&lt;/entry&gt;&lt;br /&gt;    &lt;entry id='18173'&gt;&lt;date&gt;Thu Dec 20 01:21:27 +0000 2007&lt;/date&gt;&lt;trip&gt;trip to the supermarket&lt;/trip&gt;&lt;miles&gt; 8.5&lt;/miles&gt;&lt;description/&gt;&lt;/entry&gt;&lt;br /&gt;    &lt;entry id='18174'&gt;&lt;date&gt;Thu Dec 20 01:34:26 +0000 2007&lt;/date&gt;&lt;trip&gt;visiting parents&lt;/trip&gt;&lt;miles&gt;12.7&lt;/miles&gt;&lt;description/&gt;&lt;br /&gt;    &lt;/entry&gt;&lt;br /&gt;  &lt;/records&gt;&lt;br /&gt;&lt;/car_log&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;output&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Total miles this month: 59.1&lt;br /&gt;...&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sat, 12 Jan 2008 11:41:08 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4976</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>Weighted Mean</title>
      <link>http://snippets.dzone.com/posts/show/4613</link>
      <description>Weighted mean ( http://en.wikipedia.org/wiki/Mean#Weighted_arithmetic_mean )&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;class Array&lt;br /&gt;  #sum (and mean) found on http://snippets.dzone.com/posts/show/2161&lt;br /&gt;  def sum&lt;br /&gt;    inject( nil ) { |sum,x| sum ? sum + x.to_f : x.to_f }&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def mean&lt;br /&gt;    sum.to_f / size&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  #http://en.wikipedia.org/wiki/Mean#Weighted_arithmetic_mean&lt;br /&gt;  def weighted_mean(weights_array)&lt;br /&gt;    raise "Each element of the array must have an accompanying weight.  Array length = #{self.size} versus Weights length = #{weights_array.size}" if weights_array.size != self.size&lt;br /&gt;    w_sum = weights_array.sum&lt;br /&gt;    w_prod = 0&lt;br /&gt;    self.each_index {|i| w_prod += self[i] * weights_array[i].to_f}&lt;br /&gt;    w_prod.to_f / w_sum.to_f&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Example&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&gt;&gt; a = [1,2,3]&lt;br /&gt;=&gt; [1, 2, 3]&lt;br /&gt;&gt;&gt; w = [1,1,1]&lt;br /&gt;=&gt; [1, 1, 1]&lt;br /&gt;&gt;&gt; a.weighted_arithmetic_mean(w)&lt;br /&gt;=&gt; 2.0&lt;br /&gt;&gt;&gt; a.mean&lt;br /&gt;=&gt; 2.0&lt;br /&gt;&gt;&gt; w = [5,2,1]&lt;br /&gt;=&gt; [5, 2, 1]&lt;br /&gt;&gt;&gt; a.weighted_arithmetic_mean(w)&lt;br /&gt;=&gt; 1.5&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Wed, 03 Oct 2007 21:29:12 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4613</guid>
      <author>wiseleyb (ben)</author>
    </item>
    <item>
      <title>days-up-to-month - returns the number of days in a year, preceding the given month.</title>
      <link>http://snippets.dzone.com/posts/show/3142</link>
      <description>&lt;code&gt;&lt;br /&gt;days-in-months: [31 28 31 30 31 30 31 31 30 31 30 31]&lt;br /&gt;days-in-months-leap: head change at copy days-in-months 2 29&lt;br /&gt;&lt;br /&gt;days-up-to-month: func [month /in year] [&lt;br /&gt;    sum copy/part either leap-year?/with any [year now] [days-in-months-leap] [days-in-months] month - 1&lt;br /&gt;]&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Wed, 13 Dec 2006 03:13:00 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3142</guid>
      <author>gregg.irwin (Gregg Irwin)</author>
    </item>
    <item>
      <title>Generic 'sum' and 'mean' methods for Ruby arrays</title>
      <link>http://snippets.dzone.com/posts/show/2161</link>
      <description>&lt;code&gt;class Array; def sum; inject( nil ) { |sum,x| sum ? sum+x : x }; end; end&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;It's class agnostic, so you can do this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;[1,2,3].sum              # =&gt; 6&lt;br /&gt;['a','b','c'].sum        # =&gt; 'abc'&lt;br /&gt;[['a'], ['b','c']].sum   # =&gt; ['a', 'b', 'c']&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;You can then add a 'mean' operator easily:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;class Array; def mean; sum / size; end; end&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;mean only works for numbers though, of course, like so:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;[1,2,1000].mean    # =&gt; 334&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;That said, if your class implements division, it'll also work!</description>
      <pubDate>Thu, 08 Jun 2006 20:19:04 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2161</guid>
      <author>peter (Peter Cooperx)</author>
    </item>
  </channel>
</rss>
