fc2ブログ

C#ライブラリリファレンス - 要素演算子でデータの集合の中から最初に条件に一致した要素を取り出す

概要
 Enumerable静的クラスのFirst拡張メソッドは、数あるデータの中から、指定した条件を満たす最初の要素を取り出すことができます。

日常でたとえると
 東京都の最大売上をたたき出した商品を探す。

使用に適した状況
 あるデータの集合の中で、条件を満たす最初のデータが必要になった時。First拡張メソッドの条件を受け取らないオーバーロードは、位置がわかっているときに使用し、こちらは位置を特定できない場合に使用します。

サンプル

/*----------------------------------------------------
 * 
 *  データの集合の中から
 *  最初に条件に一致した要素を取り出す
 *  
 ----------------------------------------------------*/
using System;
using System.Linq;

class Sample
{
    static void Main( )
    {
        //不完全なランダム値を用意
        int max = 10;
        Random d = new Random();
        int[ ] values = new int[ max ];
        for ( int i = 0 ; i < max ; ++i )
            values[ i ] = d.Next( 0, 100 );
        Console.WriteLine( "データ" );
        foreach ( int v in values )
            Console.Write( "{0} ", v );
        Console.WriteLine( Environment.NewLine );

        //最初の偶数を取り出す
        try {
            Console.WriteLine( 
                "最初の偶数は{0}です。",
                values.First(
                x => x % 2 == 0 ) );
        } catch ( InvalidOperationException ) {
            Console.WriteLine( 
                "偶数の要素はありません" );
        }
        Console.WriteLine();

        //終了
        Console.WriteLine( "サンプル終了。" );
        Console.ReadLine();
    }
}


名前空間
 Sytem.Linq名前空間を参照してください。

解説
 データを分析するとき、様々なデータを組み合し、その結果の最初の要素を取り出したい時がありま。このようなデータは、代表となるデータもしくは、処理上の都合で変数を初期化したい場合に使用する値などです。ただ、一言に「最初のデータ」といっても、位置を知らない場合がよくあります。
 この場合、条件を判定するオーバーロードのFirst拡張メソッドを使用すれば、最初に条件に一致したデータを取り出すことができます。

テーマ : プログラミング
ジャンル : コンピュータ

C#ライブラリリファレンス - 要素演算子を使いデータ集合の最後の要素を取り出す

概要
 Enumerable静的クラスのLast拡張メソッドは、数あるデータの中の最後に位置する要素を取り出すことができます。

日常でたとえると
 上司「結論を言ってくれ」。

使用に適した状況
 データの集合の中の最後の要素に意味がある時。通常は他の拡張メソッドと組み合して使用します。

サンプル

/*----------------------------------------------------
 * 
 *  要素演算子を使いデータ集合の最後の要素を取り出す
 *  
 ----------------------------------------------------*/
using System;
using System.Linq;

class Sample
{
    static void Main( )
    {
        //不完全なランダム値を用意
        int max = 10;
        Random d = new Random();
        int[ ] values = new int[ max ];
        for ( int i = 0 ; i < max ; ++i )
            values[ i ] = d.Next( 0, 100 );
        Console.WriteLine( "データ" );
        foreach ( int v in values )
            Console.Write( "{0} ", v );
        Console.WriteLine( Environment.NewLine );

        //最後の要素を取り出す
        Console.WriteLine( "最後の要素は{0}です。",
            values.Last() );
        Console.WriteLine();

        //終了
        Console.WriteLine( "サンプル終了。" );
        Console.ReadLine();
    }
}


名前空間
 Sytem.Linq名前空間を参照してください。

解説
 データを分析するとき、様々なデータを組み合し、その結果の最後の要素を取り出したい時がありま。このようなデータは、代表となるデータもしくは、メソッド内で戻り値にヌル値以外の何らかの意味ある値を設定したい場合などです。
 初心者の方はあまり使用用途がないように感じるでしょう。それも無理はありません。単体では何の意味も持ちません。しかしながら、処理の一部として使用するとなれば、なくてはならない要素演算子です。リファレンスを読んですぐには気づかないかもしれませんが、覚えておくと、ここに書いてあることが実感できると思います。

テーマ : プログラミング
ジャンル : コンピュータ

C#ライブラリリファレンス - 要素演算子を使いデータ集合の最初の要素を取り出す

概要
 Enumerable静的クラスのFirst拡張メソッドは、数あるデータの中から、最初の要素を取り出すことができます。

日常でたとえると
 プレゼンテーション用資料の最初の項目を言ってみて。

使用に適した状況
 データの集合の中の最初の要素に意味がある時。通常は他の拡張メソッドと組み合して使用します。

サンプル

/*----------------------------------------------------
 * 
 *  要素演算子を使いデータ集合の最初の要素を取り出す
 *  
 ----------------------------------------------------*/
using System;
using System.Linq;

class Sample
{
    static void Main( )
    {
        //不完全なランダム値を用意
        int max = 10;
        Random d = new Random();
        int[ ] values = new int[ max ];
        for ( int i = 0 ; i < max ; ++i )
            values[ i ] = d.Next( 0, 100 );
        Console.WriteLine( "データ" );
        foreach ( int v in values )
            Console.Write( "{0} ", v );
        Console.WriteLine( Environment.NewLine );

        //最初の要素を取り出す
        Console.WriteLine( "最初の要素は{0}です。",
            values.First() );
        Console.WriteLine();

        //終了
        Console.WriteLine( "サンプル終了。" );
        Console.ReadLine();
    }
}


名前空間
 Sytem.Linq名前空間を参照してください。

解説
 データを分析するとき、様々なデータを組み合し、その結果の最初の要素を取り出したい時がありま。このようなデータは、代表となるデータもしくは、処理上の都合で変数を初期化したい場合に使用する値などです。
 初心者の方はあまり使用用途がないように感じるでしょう。それも無理はありません。単体では何の意味も持ちません。しかしながら、処理の一部として使用するとなれば、なくてはならない要素演算子です。リファレンスを読んですぐには気づかないかもしれませんが、覚えておくと、ここに書いてあることが実感できると思います。

テーマ : プログラミング
ジャンル : コンピュータ

C#ライブラリリファレンス - パーティション分割演算子を使用して指定した条件を満たす間要素を飛ばす

概要
 データの集合に対して、Enumerable静的クラスのSkipWhile拡張メソッドを使用すれば、指定した条件を満たす要素を飛ばせます。

日常でたとえると
 先月間のデータは飛ばして報告する。

使用に適した状況
 データの集合の中の要素が、ある一定の条件で、興味がないがばい場合。

サンプル

/*---------------------------------------------------------
 * 
 *  パーティション分割演算子を使用して
 *  指定した条件を満たす間要素を飛ばす
 *  
 ---------------------------------------------------------*/
using System;
using System.Linq;

class Sample
{
    static void Main( )
    {
        //データソースを用意
        int max = 20;
        int[ ] values = new int[ max ];
        for ( int i = 0 ; i < max ; ++i )
            values[ i ] = i;
        Console.WriteLine( "データ" );
        foreach ( int v in values )
            Console.Write( "{0} ", v );
        Console.WriteLine( Environment.NewLine );

        //10以上の要素を取り出す
        var result =
            values.SkipWhile(
                 x => x < 10 );
        Console.WriteLine(
            "10以上の要素を取り出します・・・" );
        foreach ( var v in result )
            Console.Write( "{0} ", v );
        Console.WriteLine( Environment.NewLine );

        //終了
        Console.WriteLine( "サンプル終了。" );
        Console.ReadLine();
    }
}


名前空間
 Sytem.Linq名前空間を参照してください。

解説
 データの分析処理や加工処理をしている時、ある特定の条件のデータだけ無視したい時があります。そのような状況で役立つのがパーティション分割演算子のSkipWhileです。SkipWhileを使用すると、指定条件のデータを無視して取り出すことができます。Skip演算子と似ているSkipWhile演算子は、データの数が予め予測できない場合に使用します。意識して使い分けましょう。
 データベールに格納されている通常のデータは、順番を気にしないので、実務では何らかの拡張メソッドを併用して使用する場合が大半でしょう。

テーマ : プログラミング
ジャンル : コンピュータ

C#ライブラリリファレンス - パーティション分割演算子を使用して指定数の要素を飛ばす

概要
 データの集合に対して、Enumerable静的クラスのSkip拡張メソッドを使用すれば、指定した数だけ要素を飛ばせます。

日常でたとえると
 売上ワースト10を除いてプリントアウトする。

使用に適した状況
 データの集合の中で、ある一定の数だけ、興味がないデータがある場合。

サンプル

/*---------------------------------------------------------
 * 
 *  パーティション分割演算子を使用して指定数の要素を飛ばす
 *  
 ---------------------------------------------------------*/
using System;
using System.Linq;

class Sample
{
    static void Main( )
    {
        //データソースを用意
        int max = 10;
        int[ ] values = new int[ max ];
        for ( int i = 0 ; i < max ; ++i )
            values[ i ] = i;
        Console.WriteLine( "データ" );
        foreach ( int v in values )
            Console.Write( "{0} ", v );
        Console.WriteLine( Environment.NewLine );

        //指定数だけ要素を飛ばす
        Console.WriteLine(
            "データを3個飛ばします・・・" );
        foreach ( var v in values.Skip( 3 ) )
            Console.Write( "{0} ", v );
        Console.WriteLine( Environment.NewLine );

        //終了
        Console.WriteLine( "サンプル終了。" );
        Console.ReadLine();
    }
}


名前空間
 Sytem.Linq名前空間を参照してください。

解説
 データの分析処理や加工処理をしている時、ある特定の数のデータだけ無視したい時があります。そのような状況で役立つのがパーティション分割演算子のSkipです。Skipを使用すると、指定数だけデータを無視して取り出すことができます。
 データベールに格納されている通常のデータは、順番を気にしないので、実務では何らかの拡張メソッドを併用して使用する場合が大半でしょう。

テーマ : プログラミング
ジャンル : コンピュータ

C#ライブラリリファレンス - パーティション分割演算子を使用して指定した条件を満たす間要素を取り出す

概要
 データの集合に対して、Enumerable静的クラスのTakeWhile拡張メソッドを使用すれば、指定条件を満たすデータだけを取り出すことができます。

日常でたとえると
 四半期の売上データをExcelの表にして報告する。

使用に適した状況
 予め数がわからないデータを少しだけ取り出したい場合。一定条件以外のデータ以外はいらない場合

サンプル

/*---------------------------------------------------------
 * 
 *  パーティション分割演算子を使用して指定数の要素を取り出す
 *  
 ---------------------------------------------------------*/
using System;
using System.Linq;

class Sample
{
    static void Main( )
    {
        //データソースを用意
        int max = 20;
        int[ ] values = new int[ max ];
        for ( int i = 0 ; i < max ; ++i )
            values[ i ] = i;
        Console.WriteLine( "データ" );
        foreach ( int v in values )
            Console.Write( "{0} ", v );
        Console.WriteLine( Environment.NewLine );

        //指定数だけ要素を取り出す
        Console.WriteLine(
            "データを10個取り出します・・・" );
        foreach ( var v in values.Take( 10 ) )
            Console.Write( "{0} ", v );
        Console.WriteLine( Environment.NewLine );

        //終了
        Console.WriteLine( "サンプル終了。" );
        Console.ReadLine();
    }
}


名前空間
 Sytem.Linq名前空間を参照してください。

解説
 Take拡張メソッドは、指定した数の要素だけ取り出せるので便利です。その親戚にあたるTakeWhile拡張メソッドは、数の代わりに条件を指定できます。数が不逞の要素を取り出せるのは非常に便利です。
 Whereとの違いは、少し分かり難いと思いますが、TakeWhile拡張メソッドがパーティション分割演算子である点に注目すればわかります。Whereはデータの集合の中から順番を気にせず射影します。一方、TakeWhile拡張メソッドは、データの順番が影響します。その違がわかれば適切に使い分けることができると思います。

テーマ : プログラミング
ジャンル : コンピュータ

C#ライブラリリファレンス - パーティション分割演算子を使用して指定数の要素を取り出す

概要
 データの集合に対して、Enumerable静的クラスのTake拡張メソッドを使用すれば、指定数の要素だけ取り出せます。

日常でたとえると
 売上高TOP10の商品を決定する。

使用に適した状況
 少しずつデータを取り出したい場合。一定数以外の代表的データ以外はいらない場合

サンプル

/*---------------------------------------------------------
 * 
 *  パーティション分割演算子を使用して指定数の要素を取り出す
 *  
 ---------------------------------------------------------*/
using System;
using System.Linq;

class Sample
{
    static void Main( )
    {
        //データソースを用意
        int max = 20;
        int[ ] values = new int[ max ];
        for ( int i = 0 ; i < max ; ++i )
            values[ i ] = i;
        Console.WriteLine( "データ" );
        foreach ( int v in values )
            Console.Write( "{0} ", v );
        Console.WriteLine( Environment.NewLine );

        //指定数だけ要素を取り出す
        Console.WriteLine(
            "データを10個取り出します・・・" );
        foreach ( var v in values.Take( 10 ) )
            Console.Write( "{0} ", v );
        Console.WriteLine( Environment.NewLine );

        //終了
        Console.WriteLine( "サンプル終了。" );
        Console.ReadLine();
    }
}


名前空間
 Sytem.Linq名前空間を参照してください。

解説
 SQLを使用したデータ操作プログラミングでは、Where句を活用して、画面に表示できる数だけのデータを取り出したりすることが多々あります。例えば、モバイル端末の画面では、何万件ものデータをデータベースから取り出しても、うまく表示できません。
 他にも色々な活用場面がありますが、昨今ではセキュリティ上の対策として使用する事もあり得ます。というのも、何万件もの個人情報を流出したり、高野社内のデータを何万家も自由にだしたりすると、データの漏洩事件につながってしてしまうかもしれないからです。この場合、使用者の権限レベルなどを考慮し、複合的に処理をすることになりますが、Take拡張メソッドが役立つと思います。

テーマ : プログラミング
ジャンル : コンピュータ

C#ライブラリリファレンス - 量指定子演算子で特定の値が存在するか判定する

概要
 データの集合に対して、Enumerable静的クラスのContains拡張メソッドを使用すれば、簡潔に特定の値が存在するか判定できます。

日常でたとえると
 指定した商品が売れているか調べる。

使用に適した状況
 データの集合の中で、指定した値を持つデータが存在するか知りたい場合。

サンプル

/*---------------------------------------------------------
 * 
 *  量指定子演算子で特定の値が存在するか判定する
 *  
 ---------------------------------------------------------*/
using System;
using System.Linq;

class Sample
{
    static void Main( )
    {
        //データソースを用意
        var values = new string[ ] {
            "田中", "鈴木", "山田" };
        Console.WriteLine( "データ" );
        foreach ( string v in values )
            Console.Write( "{0} ", v );
        Console.WriteLine( Environment.NewLine );

        //問い合わせ
        Console.WriteLine( "山田さんいる?:{0}",
            values.Contains( "山田" ) );
        Console.WriteLine( "前田さんいる?:{0}",
            values.Contains( "前田" ) );
        Console.WriteLine();

        //終了
        Console.WriteLine( "サンプル終了。" );
        Console.ReadLine();
    }
}


名前空間
 Sytem.Linq名前空間を参照してください。

解説
 プログラミングでは、複数のデータの中から、特定の値を持つインスタンスを、探したい時がよくあります。この時有用なのが量指定子演算子のContainsです。この拡張メソッドを使用すれば、ループ処理と条件文の組み合わせを書かずに、実現することができます。
 プログラミングの学習では、訓練のために、ループ処理と条件文を使用し、特定のプロパティ値を持つインスタンスを探すプログラムを書くことがありますが、実務ではこちらの方で簡潔に書く方がよいでしょう。

テーマ : プログラミング
ジャンル : コンピュータ

C#ライブラリリファレンス - 量指定子演算子で条件を満たすデータが存在するか判定する

概要
 データの集合に対して、Enumerable静的クラスのAny拡張メソッドを使用すれば、指定した条件を満たすデータが存在するかチェックできます。

日常でたとえると
 特別に成績が良かった社員が存在する部署を調べる。

使用に適した状況
 データの集合の中で、指定した条件を満たすデータが存在するか知りたい場合。

サンプル

/*---------------------------------------------------------
 * 
 *  量指定子演算子で条件を満たすデータが存在するか判定する
 *  
 ---------------------------------------------------------*/
using System;
using System.Linq;

class Sample
{
    static void Main( )
    {
        //データソースを用意
        int max = 10;
        int[ ] values = new int[ max ];
        for ( int i = 0 ; i < max ; ++i )
            values[ i ] = -i;
        Console.WriteLine( "データ" );
        foreach ( int v in values )
            Console.Write( "{0} ", v );
        Console.WriteLine( Environment.NewLine );

        //0以上の値は?
        Console.WriteLine(
            "0以上の値は存在する?:{0}",
            values.Any(
                x => x >= 0 ) );
        Console.WriteLine();

        //終了
        Console.WriteLine( "サンプル終了。" );
        Console.ReadLine();
    }
}


名前空間
 Sytem.Linq名前空間を参照してください。

解説
 従来の逐次プログラミングでは、データの集合に対してループ処理で、条件を満たすデータが存在するかif文でチェックしていました。しかしながら、このような処理は、処理に関するプログラムが多く、何を意味するのかという情報を隠蔽してしまう危険性があります。また、データを一度に扱う集合指向プログラミングの考え方と相いれません。必要なのは、なるべく一行でこのチェックを実現する方法です。
 その容貌を叶えるのが、Any量指定子演算子です。この演算子(拡張メソッドとして実装されている)を使用すれば、集合指向プログラミングはもちろんの事、一行でチェックを実現できます。

テーマ : プログラミング
ジャンル : コンピュータ

C#ライブラリリファレンス - 量指定子演算子で全てのデータが条件を満たすか判定する

概要
 Enumerable静的クラスのAll拡張メソッドを使用すれば、全てのデータが指定した条件を満たすかチェックできます。

日常でたとえると
 ある期間内の全社員の営業成績が指定件数以上か調べる。

使用に適した状況
 複数のデータ集合がある一定の条件を満たしているか確認したい場合。

サンプル

/*---------------------------------------------------------
 * 
 *  量指定子演算子で全てのデータが条件を満たすか判定する
 *  
 ---------------------------------------------------------*/
using System;
using System.Linq;

class Sample
{
    static void Main( )
    {
        //データソースを用意
        int max = 10;
        int[ ] values = new int[ max ];
        for ( int i = 0 ; i < max ; ++i )
            values[ i ] = i * 2;
        Console.WriteLine( "データ" );
        foreach ( int v in values )
            Console.Write( "{0} ", v );
        Console.WriteLine( Environment.NewLine );

        //偶数?
        Console.WriteLine( 
            "全てのデータは偶数?:{0}",
            values.All( 
                x => x % 2 == 0 ) );
        Console.WriteLine();

        //終了
        Console.WriteLine( "サンプル終了。" );
        Console.ReadLine();
    }
}


名前空間
 Sytem.Linq名前空間を参照してください。

解説
 集合プログラミングでは、逐次プログラミングのように、個々のデータを一々取り出し、条件を満たすかチェックする繰り返しプログラムを書きません。量指定子のAllを指定するだけで済まします。
 こうすることにより、プログラムを処理ではなく、内容面を強調して記述できます。また、データの集合を結合する際に組み合わせることが可能となります。初心者の方はピンと来ないかもしれませんが、データを扱うプログラムを書くときにこのAll量指定子演算子の重要性について理解できると思います。

テーマ : プログラミング
ジャンル : コンピュータ

プロフィール

インドリ

Author:インドリ
みなさん、はじめまして、
コンニチハ。

ボクは、無限の夢(infinity dream)を持つネタ好きな虹色の鳥インドリ(in dre)です。
色々な情報処理技術を啄ばむから楽しみにしてね。

http://twitter.com/indori
は別人による嫌がらせ行為です。
私とは関係ないので注意して下さい。
次はなりすましブログなどをするかもしれませんが、ここ以外でブログをするつもりがないので、ここ以外にインドリのブログがあったとしても無視してください。


何度言っても分からない人がいるので、ここにコメント欄へ書き込むときの注意事項を書きます。


一、社会人としてのマナーをわきまえましょう。
一、妄想に基づく書き込みを止めてください。
一、暴言の類は書かないで下さい。
一、某誹謗中傷サイトの書き込みは彼らの妄想に基づく書き込みですから無視して、ここへ書き込まないで下さい。
一、コメント書く前に他のコメントよく読んでから行って下さい。
一、言いがかかり等の行為を禁止します。
一、その他常識的に考えて迷惑なコメントはしないで下さい。


以上のルールを守れない人のコメントは削除します。



利用上の注意
ここに紹介してある文章およびプログラムコードは正確であるように心がけておりますが、内容を保証するものではありません。当サイトの内容によって生じた損害については、一切の責任を負いませんので御了承ください。


執筆したCodeZineの記事


【VB.NETで仮想CPUを作ろう】

  1. VB.NETで仮想CPUを作ろう
  2. レジスタの実装
  3. 仮想CPUのGUI化
  4. テストドライバの改良
  5. CPUの基礎動作の実装
  6. MOV命令の実装
  7. ADD命令実装
  8. SUB命令実装
  9. INC命令&DEC命令の実装と命令長
  10. MLU命令の実装とModR/Mについて
  11. DIV命令の実装とイベント設計について
  12. 機械語駆動式 関数電卓を作ろう!
  13. 機械語駆動式 関数電卓を作ろう! 解答編(前半)
  14. 機械語駆動式 関数電卓を作ろう! 解答編(後半)


【仮想ネットワーク実装でTCP/IPを学ぼう】
  1. TCP/IPの基礎と勘所
  2. ネットワークアクセス層の勘所
  3. インターネット層の勘所
  4. トランスポート層の勘所
  5. アプリケーション層の勘所
  6. セキュリティの基礎と仮想ネットワークの仕様
  7. GDI+と独自プロトコルの定義



【並列化】
インテル Parallel Studioを使って並列化プログラミングを試してみた
並列プログラミングの効率的なデバッグを実現する「Parallel Inspector」


【TBBシリーズ】
  1. インテル スレッディング・ビルディング・ブロックの概要
  2. インテルTBBから学ぶループの並列化
  3. スレッドセーフとインテルTBBのコンテナ
  4. インテルTBBのスレッドクラス


【OpenMPシリーズ】
  1. OpenMPの基礎構文
  2. OpenMPの実行時ライブラリと並列ループ
  3. OpenMPのメモリモデルとfork- joinモデル

最近の記事
最近のコメント
月別アーカイブ
カテゴリ
Ada (9)
COBOL (5)
C (9)
C++ (11)
C# (370)
D (25)
Java (8)
Perl (1)
Ruby (14)
PHP (2)
Boo (2)
Cobra (2)
LISP (6)
F# (33)
HTML (0)
XHTML (0)
CSS (0)
XML (0)
XSLT (0)
Scala (4)
WPF (0)
WF (2)
WCF (0)
LINQ (4)
MONO (5)
Linux (0)
MySQL (0)
ブログ内検索
リンク
最近のトラックバック
RSSフィード
ブロとも申請フォーム

この人とブロともになる

QRコード
FC2カウンター