top of page
  • 執筆者の写真Reo

Linq使ってみよう


発売から3年経つというのに未だS+イカちゃんのレオです.

一週間くらい遊べていないと無性にやりたくなりますが,

TGS申し込みまでは少なくとも我慢です.



さて,今日はLinqについて書こうと思います.

Linqって何?って方,去年の私もまったく知りませんでした.

いや知らないのは私くらいで恥ずかしいことなのかもしれない・・・

まぁそれはいいとして,結構便利なんですこれ.

もちろん,いろんな方がLinqについての記事を書いておられますが


知らなかった,知ってたけど使ったことない,って人がおられるかもしれませんので

一応ここで書いて知ってもらおうというわけです.(偉そうにいえる立場じゃありません)





たとえば,

{1, 2, 4, 5, 8, 9, 11}

から奇数だけを取り出したいとしましょう.

forループを使うなら

List<int> numberList = new List<int>(){1, 2, 4, 5, 8, 9, 11};

void Plus()
{
    //この中に奇数を入れたい.
  List<int> oddList = new List<int>();
    for(int i = 0; i < numberList.Count; i++)
    {
        if(numberList[i] % 2 == 1)
        {
           oddList.Add(numberList[i]);
        }
    }
    
    //oddListのなかに1,5,9,11の4つが入った.
}

foreachを使うなら

List<int> numberList = new List<int>(){1, 2, 4, 5, 8, 9, 11};

void Plus()
{
    //この中に奇数を入れたい.
  List<int> oddList = new List<int>();
    foreach(var number in numberList)
    {
        if(number % 2 == 1)
        {
           oddList.Add(number);
        }
    }
    
    //oddListのなかに1,5,9,11の4つが入った.
}

みたいに書けます.

別にこれでもいいんですが,結構場所食うし書くのも面倒って思いませんか?


そこでLinqです.


using System.Linq;

List<int> numberList = new List<int>(){1, 2, 4, 5, 8, 9, 11};

void Plus()
{
    List<int> oddList = numberList
                  .Where(item => item % 2 == 1).ToList();
                  
   //oddListのなかに1,5,9,11の4つが入った.
}

Linqを使うとこんな感じで書けます.ちょっと短くなりましたね.


まぁこれだと別にfor,foreachでいいかと思う人も結構いるかもしれませんが

さらに条件を足しましょう.




奇数の中でも10以上のものだけとりだしたい

としましょう.

ifで分岐して書くのでもいいですが

Linqで書くとこんな感じに書けます.

using Linq;

List<int> numberList = new List<int>(){1, 2, 4, 5, 8, 9, 11};

void Plus()
{
    List<int> oddList = numberList
                  .Where(item => item % 2 == 1)
                  .Where(item => item >= 10).ToList();
                  
   //oddListのなかに1,5,9,11の4つが入った.
}

Whereを連続して書くだけですんじゃうので楽ですよね!





もう一つ,私がLinqで良く使うのがSelectです.

たとえば敵A,B,CのHPをそれぞれdamage(=10)ずつ減らすとします.

forループを使うなら

List<int> enemyHP = new List<int>(){15, 25, 50};
void Attack(int damage)
{
    for(int i = 0; i < 3; i++)
    {
         enemyHP[i] -= damage;
    }
    
    //enemyHPのなかは5, 15, 40になった.
}

みたいになると思います.



Linqを使うと

using System.Linq;

List<int> enemyHP = new List<int>(){15, 25, 50};
void Attack(int damage)
{
    enemyHP = enemyHP.Select(item => item-damage).ToList();
    //enemyHPのなかは5, 15, 40になった.
}

とずいぶんすっきりかけますね.


LinqのえらいところはこのWhereとかSelectを組み合わせていっぺんに書いても大丈夫なところです.

まぁ結局いろいろ条件を足すとどうしても見づらくはなっていくのですが,

それでもforループをたくさん書いて{}だらけになるよりは断然見やすいです.



ただLinqにもデメリットはあって,どうやら処理が重めみたいなので

あんまり頻繁に呼んだりする場合は注意しなきゃならないかもしれません.

私が使っているレベルの処理なら今のところは何も問題になっていませんが一応頭の片隅にでもに置いておきましょう.笑



Linqは他にもいろいろできることはあるのですが,よく使うのがWhereとSelectなので

これ以上は書きません.いっぺんに書いてもなかなか身に付きませんしねー・・・

興味がある方は調べてみてください!


閲覧数:24回0件のコメント

最新記事

すべて表示
bottom of page