[C#]LINQのSelectメソッドの使い方とは?index付きSelect・SelectMany
- システム
エンジニア - C#でのSelectメソッドはどのようなときに使うのですか。
- プロジェクト
マネージャー - コレクションの全要素を処理して別のオブジェクトを作成する場合に使用します。
[C#]LINQのSelectメソッドの使い方とは?
今回は、C#でのSelectメソッドの使い方について説明します。SelectメソッドとはLINQのメソッドで、コレクションの全要素を処理して別のオブジェクトを作成する場合に使用します。
ここでは、Selectメソッドの基本的な使い方、indexの使い方、クラスに対する使い方について紹介します。また、SelectメソッドとSelectManyメソッドの違いについても紹介します。
C#でのSelectメソッドの使い方に興味のある方はぜひご覧ください。
Selectの基本的な使い方
C#のSelectメソッドの基本的な使い方を紹介します。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
using System;
using System.Collections.Generic;
using System.Linq;
public class Hello{
public static void Main(){
// Listの初期化
var myintlist = new List<int>(){ 2, 6, 3, 8, 4, 1 };
var mystrlist = new List<string>(){ ""red"", ""green"", ""blue"", ""yellow"", ""black"", ""white"" };
// Select
var result1 = myintlist.Select(x => x % 3); // 要素を3で割った余り
var result2 = myintlist.Select(x => x * 2); // 要素を2倍
var result3 = mystrlist.Select(x => x.Length); // 要素の文字列長
// 結果表示
Console.WriteLine(""{0}"", string.Join("","", result1)); // 2,0,0,2,1,1
Console.WriteLine(""{0}"", string.Join("","", result2)); // 4,12,6,16,8,2
Console.WriteLine(""{0}"", string.Join("","", result3)); // 3,5,4,6,5,5
}
}
|
実行結果は以下のようになります。
1
2
3
|
2,0,0,2,1,1
4,12,6,16,8,2
3,5,4,6,5,5
|
このようにC#のSelectメソッドを使用すると、コレクションの全要素を処理して別のオブジェクトを作成できます。
index付きSelect
C#のSelectメソッドで、indexも使う方法を紹介します。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
using System;
using System.Collections.Generic;
using System.Linq;
public class Hello{
public static void Main(){
// Listの初期化
var myintlist = new List<int>(){ 2, 6, 3, 8, 4, 1 };
var mystrlist = new List<string>(){ ""red"", ""green"", ""blue"", ""yellow"", ""black"", ""white"" };
// Select
var result1 = myintlist.Select((val, index) => string.Format(""index{0}:{1}"", index, val % 3)).ToList();
var result2 = myintlist.Select((val, index) => string.Format(""index{0}:{1}"", index, val * 2)).ToList();
var result3 = mystrlist.Select((val, index) => string.Format(""index{0}:{1}"", index, val.Length)).ToList();
// 結果表示
Console.WriteLine(""{0}"", string.Join("","", result1)); // index0:2,index1:0,index2:0,index3:2,index4:1,index5:1
Console.WriteLine(""{0}"", string.Join("","", result2)); // index0:4,index1:12,index2:6,index3:16,index4:8,index5:2
Console.WriteLine(""{0}"", string.Join("","", result3)); // index0:3,index1:5,index2:4,index3:6,index4:5,index5:5
}
}
|
実行結果は以下のようになります。
1
2
3
|
index0:2,index1:0,index2:0,index3:2,index4:1,index5:1
index0:4,index1:12,index2:6,index3:16,index4:8,index5:2
index0:3,index1:5,index2:4,index3:6,index4:5,index5:5
|
このようにC#のSelectメソッドでは、indexを使うこともできます。
クラスに対するSelect
C#では、クラスに対してもSelectメソッドを使用できます。ここでは、クラスの特定プロパティを抽出する方法を紹介します。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
public class Hello{
// Humanクラス
private class Human{
public string Name { get; set; }
public int Age { get; set; }
}
public static void Main(){
// 初期化
var humans = new List<Human>(){
new Human() { Name = ""taro"", Age = 10 },
new Human() { Name = ""ichiro"", Age = 30 },
new Human() { Name = ""hanako"", Age = 20 },
new Human() { Name = ""jiro"", Age = 40 },
};
// Nameのみ, AgeのみのSelect
var namelist = humans.Select( val => val.Name );
var agelist = humans.Select( val => val.Age );
// 結果表示
Console.WriteLine(""{0}"", string.Join("","", namelist)); // taro,ichiro,hanako,jiro
Console.WriteLine(""{0}"", string.Join("","", agelist)); // 10,30,20,40
}
}
|
実行結果は以下のようになります。
1
2
|
taro,ichiro,hanako,jiro
10,30,20,40
|
SelectMany
C#のSelectManyメソッドの基本的な使い方を紹介します。SelectManyメソッドとは、複数のオブジェクトを1つのオブジェクトにまとめるメソッドです。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
public class Hello{
// Humanクラス
private class Human{
public string Name { get; set; }
public int Age { get; set; }
public List<int> Numbers { get; set; }
}
public static void Main(){
// 初期化
var humans = new List<Human>(){
new Human() { Name = ""taro"", Age = 10, Numbers = new List<int>(){ 1, 2 } },
new Human() { Name = ""ichiro"", Age = 30, Numbers = new List<int>(){ 3, 4, 5 } },
new Human() { Name = ""hanako"", Age = 20, Numbers = new List<int>(){ 6, 7, 8, 9 } },
new Human() { Name = ""jiro"", Age = 40, Numbers = new List<int>(){ 10 } },
};
// NumversのみのSelectMany
var numlist = humans.SelectMany(val => val.Numbers);
var numlistsum = humans.SelectMany(val => val.Numbers).Sum();
// 結果表示
Console.WriteLine(""{0}"", string.Join("","", numlist)); // 1,2,3,4,5,6,7,8,9,10
Console.WriteLine(""sum:{0}"", numlistsum); // sum:55
}
}
|
実行結果は以下のようになります。Numbersが1つにまとめられていることが分かります。
1
2
|
1,2,3,4,5,6,7,8,9,10
sum:55
|
- システム
エンジニア - C#でのSelectメソッドの使い方、理解できました。
- プロジェクト
マネージャー - 解説したSelectメソッド基本的な使い方やSelectManyメソッドの違いをしっかり理解して活用してください。
まとめ
いかがでしたでしょうか。C#でのSelectメソッドの使い方について説明しました。ここでは、Selectメソッドの基本的な使い方、indexの使い方、クラスに対する使い方について紹介しました。また、SelectメソッドとSelectManyメソッドの違いについても紹介しました。
ぜひご自身でC#のソースコードを書いて、理解を深めてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
C#新着案件New Job
-
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(新宿駅) -
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(新宿駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円神奈川県横浜市(桜木町駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円神奈川県横浜市(桜木町駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(西新宿駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(西新宿駅)