2020年09月17日
川俣晶の縁側ソフトウェアC# コーディング How Tototal 1089 count

【入門級】1から100までの偶数の合計を【ループなし】で書く

Written By: 川俣 晶連絡先

ループなしで §

 1から100までの偶数の合計を計算してみましょう。ただし、ループなしで書くという条件を付けましょう。

 つまり、for/while/doを使いません。

 できるでしょうか。

 できます。

 ポイントは何でしょうか。

 ループなしで数字の列を発生させるEnumerable.Rangeメソッドです。

 問題はいかにして偶数を得るかです。

作戦1 限定法 §

 サンプルソースの作戦1は、偶数を得るために、Whereメソッドで偶数かどうかを判定しています。偶数だけ通せば合計(Sum())は偶数だけの合計です。

作戦2 加工法 §

 サンプルソースの作戦2は、偶数を得るために、値を2倍しています。1から50の数字を2倍すれば、1から100までの偶数になるというアイデアです。パッと見て意図が分かりにくいですがソースが短くなります。

 どちらを使うのかはあなたの判断次第です。

罠の数々 §

  • Enumerable.Rangeメソッドは1つずつ増えていく値しか生成できないが、それを元にいろいろな値を計算で作り出せる。Selectメソッドを連結して値を加工してしまおう
  • 20世紀の常識ではループを使う場面でも、ループなしで一発で書ける処理は割と多い。参考にする資料が古いと無駄なループを書かされるぞ。

参考リンク §

Enumerable.Range(Int32, Int32) メソッド

Enumerable.Where メソッド

Enumerable.Sum メソッド

Enumerable クラス

 Enumerableクラスには便利なメソッドが他にも多いぞ。確認しておこう。特に、RepeatメソッドはRangeメソッドと並んで、値の列の生成に便利な双璧だ。

リポジトリ §

https://github.com/autumn009/cshowto

SumOneLine §

using System;

using System.Linq;

class Program

{

    static void Main()

    {

        // 作戦1 限定法

        Console.WriteLine(Enumerable.Range(1,100).Where(c => (c % 2) == 0).Sum());

        // 作戦1 加工法

        Console.WriteLine(Enumerable.Range(1, 50).Sum(c=>c*2));

    }

}

実行結果

2550

2550

Facebook

COOL C# CREW

C#ハウツー連載の解説増量、カラーのソース、新規書き下ろし追加の読みやすい単行本はこちら。

C#ハウツー: 逆引き入門・こんな機能はどう書くの?
キーワード【 川俣晶の縁側ソフトウェアC# コーディング How To
【C# コーディング How To】の次のコンテンツ
2020年
09月
18日
【入門級】時間の差分を計算する
3days 0 count
total 1320 count
【C# コーディング How To】の前のコンテンツ
2020年
09月
16日
【入門級】byte?とshortはどちらがメモリ効率が良いか?
3days 0 count
total 1664 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20200917091322
サイトの表紙【C# コーディング How To】の表紙【C# コーディング How To】のコンテンツ全リスト 【C# コーディング How To】の入手全リスト 【C# コーディング How To】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.