4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

LINQ

Last updated at Posted at 2021-02-06

#Select 要素を操作

using System;

class Prog{
	static void Main() {

		int[] list ={1, 2, 3, 4, 5};
		int[] list2 = new int[list.Length];

		for(int i=0;	i<list.Length;	i++) {
			list2[i] = list[i] * 10;
		}
		foreach(int i in list2){
			Console.WriteLine(	i);		
		}
	}
}

LINQにすると

using System;
using System.Linq;
using System.Collections.Generic;

class Prog{
    static void Main() {
        int[] list ={1, 2, 3, 4, 5};        
        IEnumerable<int> list2 = list.Select(    i => i*10);
		
        foreach(int i in list2){
            Console.WriteLine(  i);     
        }
    }
}

Selectは、各要素を操作してIEnumerable<TResult>で返す

#SelectMany 平坦化

using System;
using System.Collections.Generic;

class Prog{
	static void Main() {

		List<int[]> ls = new List<int[]>(); //配列のリスト

		for(int i=0;	i<3;	i++){	//{0,0} {0,0} {0,0}の3つの配列が入ったリスト
			ls.Add(		new int[2]);
		}
		
		List<int> ls2 = new List<int>();	//これに全ての要素を入れ直す

		foreach(int[] array in ls){	
			foreach(int i in array){	
				ls2.Add(i);
			}
		}

		foreach(var val in ls2) {			
			Console.WriteLine(val);
		}
	}
}

LINQにすると

using System;
using System.Linq;
using System.Collections.Generic;

class Prog{
    static void Main() {

        int[] ls = { 2,2,2};
        IEnumerable<int> ls2	= ls.SelectMany(   x => new int[x] );
		//IEnumerable<int[]> ls3	= ls.Select(x => new int[x]);	//戻り値は配列のコレクション

        foreach(int i in ls2) {
            Console.WriteLine(i);
        }
    }
}

SelectManyは、コレクションの要素を操作してバラバラにして返します。
ラムダ式で作られる配列を1つずつintにして、intのコレクションにして返します。

一方Selectは、要素の操作までは同じですがバラバラにしないで、int[]のコレクションで返します。

#Where 条件で抽出

using System;
using System.Collections.Generic;

class Prog{
	static void Main() {

		int[] ls = {1,2,3,4,5};
		List<int> ls2 = new List<int>();

		foreach(int i in ls) {
			if(	i> 3)	ls2.Add(i);
		}
		foreach(var val in ls2) {
			Console.WriteLine(val);
		}
	}
}

LINQにすると

using System;
using System.Linq;
using System.Collections.Generic;

class Prog{
	static void Main() {
		int[] ls = {1,2,3,4,5};
		IEnumerable<int> ls2 = ls.Where(	x => x > 3);

		foreach(int i in ls2) {
			Console.WriteLine(i);
		}
	}
}

Whereは、条件を満たす要素だけ抽出します。

#Whereと、Selectの組み合わせ

int[] ls = {1,2,3,4,5};

//出力
40
50

4以上の数値だけに10をかけて出力

using System;
using System.Linq;
using System.Collections.Generic;

class Prog{
	static void Main() {
		int[] ls = {1,2,3,4,5};
		IEnumerable<int> ls2 = ls.Where(x => x > 3).Select(x => x *10);

		foreach(int i in ls2) {
			Console.WriteLine(i);
		}
	}
}

#OrderBy 並べ替え

using System;
using System.Linq;

class Prog {
	public static void Main() {

		int[] ary = { 6, 12, 7, 1, 4 };
		IOrderedEnumerable<int> order = ary.OrderBy(x => x);

		foreach(int i in order) {
			Console.WriteLine(i);
		}
	}
}

#匿名クラス

using System;
using System.Linq;

class Prog{
	public static void Main(string[] args) {

		string[] names = {
			"ナポレオン",
			"ピカソ",
			"エジソン",
		};
	}
}

LINQを使って文字数を出力

ナポレオンは、5文字
ピカソは、3文字
エジソンは、4文字
using System;
using System.Linq;

class Prog{
    public static void Main(string[] args) {

        string[] names = {
            "ナポレオン",
            "ピカソ",
            "エジソン",
        };
        foreach(var ins in names.Select((name) => new { Name = name, Count = name.Length })) {
            string output = string.Format("{0}は、{1}文字", ins.Name, ins.Count);
            Console.WriteLine(output);
        }
    }
}

Selectは、匿名クラスのインスタンスを返しています。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?