C# LINQでリストの値を操作するサンプル

C#のLINQでリストの値を操作するサンプルです。

目次

説明 LINQとは
各要素を処理する(Select)
各要素を条件で判定して抽出する(Where)
要素の重複をなくす(Distinct)
要素を並び替える(OrderBy)
要素数を制限する(Take)
要素数をスキップする(Skip)
要素数を取得する(Count)
IEnumerable型をList型に変換(ToList)
先頭/最後の要素を取得する(First/Last)
要素の条件が全て一致するか(All)
要素の条件が1つでも一致するか(Any)
合計/平均/最大値/最小値
LINQのメソッドが複数の場合

LINQとは

各要素を処理する(Select)

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

class Test1
{
	static void Main()
	{
		var List1 = new List<string>() { "赤", "黄", "青" };

		var List2 = List1.Select(x => x + "です");

		List2.ToList().ForEach(Console.WriteLine);//赤です 黄です 青です

	}
}

3行目は、LINQを使用するのに必要です。
11行目は、Selectで9行目の各要素に文字列を追加しています。

各要素を条件で判定して抽出する(Where)

	var List1 = new List<string>() { "aa", "ab", "ac" };

	var List2 = List1.Where(x => x == "ab");
	//var List2 = List1.Where(x => a.StartsWith("ab"));

	List2.ToList().ForEach(Console.WriteLine);//ab

Whereメソッドで各要素を条件で判定してtrueのものを抽出しています。
4行目のStartWithメソッドは、文字列の先頭が引数の値と一致した場合trueを返します。

要素の重複をなくす(Distinct)

  var List1 = new List<string>() { "A", "A", "B" };

  var List2 = List1.Distinct();

  List2.ToList().ForEach(Console.WriteLine);//A B

Distinctメソッドは、重複をなくします。

要素を並び替える(OrderBy)

  var List1 = new List<string>() { "aa", "zz", "cc" };

  var List2 = List1.OrderBy(x => x);
  List2.ToList().ForEach(Console.WriteLine);// aa cc zz

  var List3 = List1.OrderByDescending(x => x);
  List3.ToList().ForEach(Console.WriteLine);// zz cc aa

OrderByメソッドは昇順になります。
OrderByDescendingメソッドは降順になります。

要素数を制限する(Take)

  var List1 = new List<string>() { "赤", "黄", "青" };

  var List2 = List1.Take(2);

  List2.ToList().ForEach(Console.WriteLine);// 赤 黄

Takeは引数の値の要素数に制限されます。

要素数をスキップする(Skip)

  var List1 = new List<string>() { "赤", "黄", "青" };

  var List2 = List1.Skip(2);

  List2.ToList().ForEach(Console.WriteLine);// 青

Skipは引数の値の要素数をスキップします。

要素数を取得する(Count)

var List1 = new List<int>() { 1, 2, 3, 4, 5 };

var num1 = List1.Count(x => x > 2);

Console.WriteLine(num1);// 3

Countは、要素数を返します。2より大きい要素数で3を返します。

IEnumerable型をList型に変換(ToList)

	var List1 = new List<string>() { "赤", "黄", "青" };
	var List2 = List1.Select(x => x);
	List1.ToList().ForEach(Console.WriteLine);// 赤 黄 青

2行目のselectメソッドの戻りは、IEnumerable型です。
3行目のToListメソッドは、IEnumerable型をList型に変換します。

先頭/最後の要素を取得する(First/Last)

  var List1 = new List<string>() { "赤", "黄", "青" };

  var List2 = List1.First();
  List2.ToList().ForEach(Console.WriteLine);//赤

  var List3 = List1.Last();
  List3.ToList().ForEach(Console.WriteLine);//青

Firstメソッドは先頭、Lastメソッドは最後の要素を取得します。

要素の条件が全て一致するか(All)

  var List1 = new List<int>() { 5, 8, 9 };

  var b1 = List1.All(x => x > 7);//すべての要素は7より大きいか
  Console.WriteLine(b1);//False

  var b2 = List1.All(x => x > 3);//すべての要素は3より大きいか
  Console.WriteLine(b2);//True

すべての要素の条件が一致した場合はtrueをそうでない場合はfalseを返します。

要素の条件が1つでも一致するか(Any)

  var List1 = new List<int>() { 5, 8, 9 };

  var b1 = List1.Any(x => x > 10);//10より大きい要素はあるか
  Console.WriteLine(b1);//False

  var b2 = List1.Any(x => x > 8);//8より大きい要素はあるか
  Console.WriteLine(b2);//True

要素の条件が1つでも一致した場合はtrueをそうでない場合はfalseを返します。

合計/平均/最大値/最小値

	var List1 = new List<int>() { 2, 4, 6 };

	Console.WriteLine(List1.Where(x => x > 3).Sum());//10 (合計)

	Console.WriteLine(List1.Where(x => x > 3).Average());//5 (平均)

	Console.WriteLine(List1.Where(x => x > 3).Max());//6 (最大値)

	Console.WriteLine(List1.Where(x => x > 3).Min());//4 (最小値)

3より大きい値を対象にしています。

LINQのメソッドが複数の場合

	var List1 = new List<int>() { 10, 20, 30 };

	var List2 = List1.Where(x => x > 10)
					.Select(x => x + "です");

	List2.ToList().ForEach(Console.WriteLine);//20です 30です

3,4行目は、LINQのメソッドを複数指定しています。

関連の記事

C# for文 処理を繰り返すサンプル(break/continue)
C# 配列の仕組みと使い方のサンプル

△上に戻る