0

私は小さなコレクション (約 10 アイテム) を持っており、それぞれに中程度のコレクション (200 から時には 500 まで) のアイテムがリンクされています (私が正しければ、多対 1 の関係です)。

次のようにリストを反復処理する方法を探しています。

var cardSetQry = from cs in mDb.CARD_SET
                 select cs;

List<CARD_SET> listCardSets = cardSetQry.ToList();

Dictionary<string, List<CARD>> cardsList = new Dictionary<string, List<CARD>>();

foreach (var cardSet in listCardSets)
{
    CARD_SET set = cardSet;    
    var cardQry = from c in mDb.CARD
                  where c.CARD_SET_IDE == set.CARD_SET_IDE
                  select c;

    if (cardQry.Any())
    {
        HashSet<CARD> listCards = new HashSet<CARD>(cardQry.ToList());    
        foreach (var card in listCards)
        {
            card.CARD_MASTER_IDE = null;
            card.CARD_CHILD_IDE = null;

            mDb.SaveChanges();
        }    
        cardsList.Add(set.CARD_SET_NAME, listCards);
    }
}

dictionaryカード セット名と関連するオブジェクトのリストの両方が必要なので、を使用していますが、提案は受け付けています。このメソッドは、アプリの起動時に 1 回呼び出され、すべてのアイテムを反復処理する必要があります。

2番目のリスト(HashSet)については、先週からこれを使い始めました。ちょっとした調査で、hashSet は高速なコレクション タイプであると確信しました。しかし、私はそれがどのように機能するのかわかりません。

では、問題は、私がしなければならないことを達成するために、どのコレクションを使用するのが最も速いか、そしてその理由は何ですか?

4

2 に答える 2

2

サイズに関係なく、HashSet<T>aを列挙する速度と a を列挙する速度に大きな違いがあるとは思えません。List<T>

どちらを使用するかは、使用方法によって異なります。コレクションに何かがあるかどうかをすばやく判断する機能が必要な場合は、 を使用しますHashSet。それ以外の場合は、 を使用しますListHashSet用途はありますが、単純な連続したリストとしてはやり過ぎです。また、使用するメモリの 3 倍または 4 倍も使用しListます。

cardQry.ToList()また、あなたのを作成するときのポイントは何HashSetですか? あなたはただ書くことができますnew HashSet<CARD>(cardQry)

于 2013-07-15T14:16:40.973 に答える
1

このような小さな収集速度では問題になりません。本当にキー値としてマップしたい場合は、Dictionary を使用する必要があります。それ以外の場合は、ハッシュセットを使用してください。ハッシュセット一覧と辞書の比較

于 2013-07-15T14:04:11.977 に答える