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拡張メソッドを使用すれば、最初に条件に一致したデータを取り出すことができます。

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

中の人の徒然草507 犯罪に対する甘さが日本を悪くしている

 ここ最近思ったことは、日本は犯罪を容認する土壌が全てを悪くしているという事です。今日ニュースを見ていると、うちわでもめていました。それについてニュースキャスターは「どうでもいい。時間の無駄だ。」という風な趣旨の事を言っていました。しかしながら、選挙法違反という犯罪行為を「どうでもいい。」として流していいのでしょうか?また、税金で団扇を発注しているとなれば大問題です。日本人はどうも犯罪に甘いようです。
 同じく今日報道されて居た青色発光ダイオードのノーベル賞受賞でも、日本の「個人の知的財産を自由に奪ってもいい。」という犯罪軽視が生んだ悲劇です。ノーベル賞級の人を国外に行かざるを得ない状況に追い込む日本は、犯罪行為を軽視し企業ばかりを優遇する野蛮国家です。私も特許出願をしたことがあるのでわかっていますが、特許庁及び政府は「個人の特許を奪って何が悪い?」という態度です。私はそれが故に、10年以上技術が遅れていると思いつつも、発表していません。私の技術があれば、格段に進歩するので、仕事中いつも遅れた技術を使うのが苦痛に思っているのですが、国家が犯罪を容認しており、それ故に個人の知的を守る術がないので、墓の下に持っていくしかありません。日本では、どうして個人の財産を泥棒企業の自由にさせなくてはいけないのでしょうか?日本は個人を見殺しにして、企業犯罪を容認していますが、それが法治国家のあるべき姿なのか非常に疑問です。近代国家を名乗っていますが、その態度は野蛮な国そのものです。
 そういえば、報道の自由を武器にして「芸能時や著名人に対してならば何をしてもいい」と日本の報道機関は主張しています。しかしながら、それは憲法違反です。職業で人権を失う事はありませんし、マスメディア業界の人が著名人だと思ったら人権がなくなるなんてことあり得ません。こういう事例を見ても、日本は法律を軽視する野蛮国家であると思います。
 日本の全ての問題の根源は、こういう犯罪を容認する態度だといってもよいと私は思います。日本は素晴らしい面がたくさんあり、私は日本人であることに誇りを持っていますが、こういう暗黒面は許容できません。こういう部分をなくしたら、日本はどれほどよくなるか・・・非常に残念でなりません。
 世間は今、女性登用だとか、経済政策などといっていますが、そういう「法律と道徳を守る」という当たり前のことをしてから言ってほしいものです。犯罪を容認する人たちが、日本をよくするといっても説得力がありません。昭和初期の段階で松下幸之助さんが「政治が経済活動を邪魔している」といっているのですから、えらそうにしていないで邪魔をすることを止めてほしいものです。そして、犯罪者を捕まえるという国として当然のことをしてほしいです。
 ところで、政治にかかわる人たちの給与は、何故当人たちが勝手に決めているのでしょうか?国民のために働いているというのであれば、国民が報酬を定める形にするのが当然であって、「国民が何人死んでも報酬は同じ」だという現状が国家システム(情報科学的にいうと本当は国家ウイルス)の元凶だと思います。現に東北復興は進んでいませんし、ブラック企業は野放し状態です。日本は企業ならば犯罪をしてもよいという不合理な国です。何はともあれ、当たり前のことを当たり前にするだけという子供でも言われている事をちゃんとする世の中になってほしいと切に願います。

テーマ : 日記
ジャンル : 日記

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拡張メソッドが役立つと思います。

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

中の人の徒然草506 利き腕と分類のむなしさを感じた秋

 私は最近、胸のときめきを求めて数学をちびちびと堪能しています。それで思ったのですが、システム屋にとっては、数学の抽象さは通常の思考です。システムを設計する際も、実装する際も、その他の工程の時も・・・システム屋は常に抽象的に考えています。ですから、数学の考え方は性に合っています。
 とはいえ、情報技術が理数系だと思ったら大間違いです。芸術的感性と文系のセンスも要ります。情報技術は全てが混ざった魔術に近いものです。理屈だけでは現実に役立つシステムは作れません。
 そうは言うものの、数学も幻術に近いような気がしてきました。というのも、数学をやっていると、段々左利きになってきたからです。右脳左脳という分類に照らし合してみると、数学は左脳を使うから、右利きのはずなんだけどな・・・やっぱり、右脳左脳の分類なんて、占いと同じですね。
 それにしても、不思議なのは、数学をやったら左利きになってきたという事実です。自分でもよくわからないのですが、数学を毎日1時間ほどしていると、気が付いたら物を左手で掴んでいるようになりました。おそらく偶然なのでしょうが、学習が脳に与える影響が気になります。
 それはさておき、やはり分類なんて便宜上のものですね。数学だって、幾何学・代数学・解析学と綺麗に分かれていません。全てが混ざり合っているのが本当の数学です。情報技術もまた、作業工程でわかれているのではなく、設計も実装もその他の事も境界なく混ざり合ってできています。何かを分類することは学習上大切ですが、それにこだわりすぎると真実が見えなくなります。実際、日本のIT業界は拘りすぎて、酷い有様になっています。
 物事は全て空なのかな?分類は補助輪と同じで、本格的にやり始めたら邪魔なだけなのでしょう。思考の枠組みを取り除いて、柔軟に生きたいものですね。

テーマ : 日記
ジャンル : 日記

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です。この拡張メソッドを使用すれば、ループ処理と条件文の組み合わせを書かずに、実現することができます。
 プログラミングの学習では、訓練のために、ループ処理と条件文を使用し、特定のプロパティ値を持つインスタンスを探すプログラムを書くことがありますが、実務ではこちらの方で簡潔に書く方がよいでしょう。

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

プロフィール

インドリ

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カウンター