VB.NETのLINQでリストの値を操作するサンプルです。
目次
説明 | LINQとは |
各要素を処理する(Select) | |
各要素を条件で判定して抽出する(Where) | |
要素の重複をなくす(Distinct) | |
要素を並び替える(OrderBy) | |
要素数を制限する(Take) | |
要素数をスキップする(Skip) | |
IEnumerable型をList型に変換(ToList) | |
LINQのメソッドが複数の場合 |
LINQとは
- リストなどのコレクションや配列で加工や集計等できます。
- LINQは「リンク」と読み、Language Integrated Queryの略です。
- 以下は、MicrosoftのVisual Basic における LINQ の概要のリンクです。
https://docs.microsoft.com/ja-jp/dotnet/visual-basic/programming-guide/language-features/linq/introduction-to-linq
各要素を処理する(Select)
Module Module1
Sub Main()
Dim List1 As New List(Of String)(New String() {"赤", "黄", "青"})
Dim List2 = From x In List1
Select (x + "です")
For Each x In List2
Console.WriteLine(x) '赤です 黄です 青です
Next
End Sub
End Module
6行目は、Selectで3行目の各要素に文字列を追加しています。
各要素を条件で判定して抽出する(Where)
Dim List1 As New List(Of String)(New String() {"赤", "黄", "青"})
Dim List2 = From x In List1
Where (x = "黄")
'Dim List2 = From x In List1
'Where (x.StartsWith("黄"))
For Each x In List2
Console.WriteLine(x) '黄
Next
Whereメソッドで各要素を条件で判定してtrueのものを抽出しています。
6行目のStartWithメソッドは、文字列の先頭が引数の値と一致した場合trueを返します。
要素の重複をなくす(Distinct)
Dim List1 As New List(Of String)(New String() {"A", "A", "B"})
Dim List2 = From x In List1
Distinct
For Each x In List2
Console.WriteLine(x) 'A B
Next
Distinctメソッドは、重複をなくします。
要素を並び替える(OrderBy)
Dim List1 As New List(Of String)(New String() {"aa", "zz", "cc"})
Dim List2 = From x In List1
Order By x
For Each x In List2
Console.WriteLine(x) 'aa cc zz
Next
Dim List3 = From x In List1
Order By x Descending
For Each x In List3
Console.WriteLine(x) 'zz cc aa
Next
OrderByは昇順になります。
OrderBy Descendingは降順になります。
要素数を制限する(Take)
Dim List1 As New List(Of String)(New String() {"赤", "黄", "青"})
Dim List2 = From x In List1
Take (2)
For Each x In List2
Console.WriteLine(x) '赤 黄
Next
Takeは引数の値の要素数に制限されます。
要素数をスキップする(Skip)
Dim List1 As New List(Of String)(New String() {"赤", "黄", "青"})
Dim List2 = From x In List1
Skip (2)
For Each x In List2
Console.WriteLine(x) '青
Next
Skipは引数の値の要素数をスキップします。
IEnumerable型をList型に変換(ToList)
Dim List1 As New List(Of String)(New String() {"赤", "黄", "青"})
Dim List2 = From x In List1
Select (x)
Console.WriteLine(List2.ToList()) 'System.Collections.Generic.List`1[System.String]
3行目のselectメソッドの戻りは、IEnumerable型です。
4行目のToListメソッドは、IEnumerable型をList型に変換します。
LINQのメソッドが複数の場合
Dim List1 As New List(Of Integer)(New Integer() {10, 20, 30})
Dim List2 = From x In List1
Where (x > 10)
Select (x + 5)
For Each x In List2
Console.WriteLine(x) '25 35
Next
4,5行目は、LINQのメソッドを複数指定しています。
関連の記事