[C#]リストから重複する要素とその個数を辞書として抽出するには?

C#

どうも、ちょげ(@chogetarou)です。

リスト(List)から重複がある要素とその個数を辞書として抽出する方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

リスト(list)から重複がある要素とその個数を辞書として抽出するには、System.Linqを使います。

まず、System.Linqを導入します。

using System.Linq;

次に、リスト(List)からGroupBy()を呼び出します。

GroupBy()の引数に、引数をそのまま返すラムダ式を指定します。

GroupBy()からWhere()を呼び出し、Where()のラムダ式で「引数.Count() > 1」を返します。

そして、Where()からToDictionary()を呼び出します。

Select()の引数に、第1引数に引数のKeyプロパティを返すラムダ式、第2引数に引数のCount()を返すラムダ式を指定します。

var duplicates = list.GroupBy(x => x)
    .Where(x => x.Count() > 1)
    .ToDictionary(x => x.Key, y => y.Count());

上記のToDicationary()は、リストから重複する要素とその個数を抽出した辞書を返します。

使用例

using System;
using System.Linq;
using System.Collections.Generic;
public class Example
{
	public static void Main()
	{
		List<int> numbers = new List<int>() { 1, 2, 3, 1, 1, 4, 3, 5 };
		
		var duplicates = numbers.GroupBy(x => x)
		    .Where(x => x.Count() > 1)
		    .ToDictionary(x => x.Key, y => y.Count());
		    

		Console.WriteLine(String.Join(",", duplicates)); //[1, 3],[3, 2]
		
 	}
}

コメント

タイトルとURLをコピーしました