0

次のように定義されたクラスがあります。

public class CoinRepository 
    {
        private Dictionary<Coin, int> repository;

        public CoinRepository()
        {
            repository = new Dictionary<Coin, int>();
        }

        public void Add(List<Coin> coins)
        {
            foreach (var coin in coins)
            {
                repository[coin] = repository.ContainsKey(coin) ? repository[coin] + 1 : 1;               
            }
        }      
    }       

   public class Coin
   {
     public int CoinValue { get; set; }
    //Has equals, hascode etc implemented. Omitted here for brevity.
   }

add メソッドが複数回呼び出されるので、その foreach ループを LINQ クエリで短縮したいと考えています。

基本的に私がする必要があるのは、すべてのコインをそのコイン値でグループ化し、リポジトリに追加することです。ただし、それを行っている間、既に存在するものとマージする必要があります。LINQ を使用してこれを達成するにはどうすればよいですか?

例: リポジトリで利用可能な値 1 と 2 の 2 つのコインがあり、値 1、2、および 3 でコインの別の追加要求を受け取った場合、リポジトリには 3 種類のコインがあります。カウント 2 で値 1 のコイン、カウント 2 で値 2 のコイン、カウント 1 で値 3 のコイン。

ありがとう -マイク

.NET 3.5 の使用

4

3 に答える 3

1

これは、処理するコインのコレクションがあることを前提としています。

コインとコインの頻度の辞書を作成しようとしているようですね。その場合、ソリューションは 1 行で記述できます。

var dict = coins.GroupBy(c => c).ToDictionary(g => g.Key, g => g.Count());

代わりに、コインと合計 CoinValue の辞書を作成しようとしている場合:

var dict = coins.GroupBy(c => c)
            .ToDictionary(g => g.Key, g => g.Sum(c => c.CoinValue));
于 2013-09-19T23:36:24.760 に答える
0

これは LINQ では実現できません。LINQ は、データ構造を変更するのではなく、クエリを実行するためのものです。

于 2013-09-19T23:38:58.853 に答える