かずきのBlog

C#やJavaやRubyとメモ書き

目次

Blog 利用状況

ニュース

わんくまBlogが不安定になったため、前に書いてたはてなダイアリーにメインを移動します。
かずきのBlog@Hatena
技術的なネタは、こちらにも、はてなへのリンクという形で掲載しますが、雑多ネタははてなダイアリーだけに掲載することが多いと思います。
コメント
プログラマ的自己紹介
お気に入りのツール/IDE
プロフィール
経歴
広告
アクセサリ

書庫

日記カテゴリ

[C#]Enumerableで使ったこと無かったメソッド

NyaRuRuさんが俺の書いたコードをLINQやらを駆使して書きかえてくれた。
http://d.hatena.ne.jp/NyaRuRu/20080120/p2

その中で、使い方とかをあまり理解してなかったメソッドがいくつかあったので実験。
知らなかったメソッドは下の3つ。

  • Repeat
  • TakeWhile
  • Concat

とりあえずRepeatから。
これは第一引数に指定したものを、第二引数で指定した回数だけ返すIEnumerableを返すっぽい。
早速実験。

        [Test]
        [ExpectedException(ExceptionType=typeof(ArgumentOutOfRangeException))]
        public void Repeat()
        {
            var repeat = Enumerable.Repeat(10, 3);
            Assert.AreEqual(10, repeat.ElementAt(0));
            Assert.AreEqual(10, repeat.ElementAt(1));
            Assert.AreEqual(10, repeat.ElementAt(2));
            repeat.ElementAt(3); // exception!!
        }

NyaRuRuさんのBlogでは、1つだけしかないものをLINQに渡すためのエントリポイントを作るためのような感じで使われてた。

次は、TakeWhile!
これは、IEnumerableから第一引数で渡されたFuncがfalseを返すまでの要素を返す。

        [Test]
        public void TakeWhile()
        {
            var range = Enumerable.Range(1, 10);
            var takeWhile = range.TakeWhile((i) => i <= 5); // 1~5
            Assert.AreEqual(1, takeWhile.ElementAt(0));
            Assert.AreEqual(2, takeWhile.ElementAt(1));
            Assert.AreEqual(3, takeWhile.ElementAt(2));
            Assert.AreEqual(4, takeWhile.ElementAt(3));
            Assert.AreEqual(5, takeWhile.ElementAt(4));
        }

最後にConcat。これはくっつけるだけです。

        [Test]
        public void Concat()
        {
            var a = Enumerable.Range(1, 3); // 1,2,3
            var b = Enumerable.Range(4, 3); // 4,5,6
            var c = Enumerable.Concat(a, b);
            Assert.AreEqual(6, c.Count());
            Assert.AreEqual(1, c.ElementAt(0));
            Assert.AreEqual(2, c.ElementAt(1));
            Assert.AreEqual(3, c.ElementAt(2));
            Assert.AreEqual(4, c.ElementAt(3));
            Assert.AreEqual(5, c.ElementAt(4));
            Assert.AreEqual(6, c.ElementAt(5));
        }

投稿日時 : 2008年1月21日 1:20

Feedback

# t shirt scarf 2012/10/26 3:52 http://www.burberryoutletscarfsale.com/accessories

Utterly indited subject material, regards for selective information. "You can do very little with faith, but you can do nothing without it." by Samuel Butler.
t shirt scarf http://www.burberryoutletscarfsale.com/accessories/burberry-scarf.html

# wallet 2012/10/27 22:42 http://www.burberryoutletonlineshopping.com/burber

you are in point of fact a good webmaster. The site loading pace is amazing. It kind of feels that you are doing any unique trick. Moreover, The contents are masterwork. you have performed a excellent activity in this topic!
wallet http://www.burberryoutletonlineshopping.com/burberry-wallets-2012.html

# cheap burberry bags 2012/10/28 17:19 http://www.burberryoutletonlineshopping.com/burber

I genuinely enjoy reading through on this web site, it has superb content. "Don't put too fine a point to your wit for fear it should get blunted." by Miguel de Cervantes.
cheap burberry bags http://www.burberryoutletonlineshopping.com/burberry-tote-bags.html

# women t shirts 2012/10/28 17:19 http://www.burberryoutletonlineshopping.com/burber

But wanna remark on few general things, The website pattern is perfect, the articles is rattling wonderful : D.
women t shirts http://www.burberryoutletonlineshopping.com/burberry-womens-shirts.html

# burberry scarf 2012/10/28 17:19 http://www.burberryoutletonlineshopping.com/burber

Some genuinely fantastic articles on this site, appreciate it for contribution. "I finally know what distinguishes man from other beasts financial worries. - Journals" by Jules Renard.
burberry scarf http://www.burberryoutletonlineshopping.com/burberry-scarf.html

タイトル
名前
Url
コメント