4

整数配列に分割された文字列があります。この配列のサイズは、1 アイテムから 100,000 (またはそれ以上) までです。順序は重要ではありません。

目的は、後でオブジェクトを使用して、値が存在するかどうかを判断することです。testmeInt別のループがこのオブジェクトに対してテストを行い、アイテムが存在するかどうかを確認します (ループは、配列内のアイテムの数よりも多く反復します)。

方法 1: 配列

整数を選択しようとすると、エラーが発生します

方法 2: 辞書

var testme = "12,23".Split(',');
int[] testmeInt = Array.ConvertAll<string, int>(testme, int.Parse);
Dictionary<int, int> TestMeDict = new Dictionary<int, int>();

foreach (int item in testmeInt)
{
    TestMeDict.Add(item, 0);
}


for (int i = 1; i <= 50000000; i++)
{
    if (TestMeDict.ContainsKey(i) == true) {  
        //It Exists
    }
}

私の推測では、 Dictionary を使用する Way2 が最速になるでしょう。この質問は私のものと似ていますが、私の正確なユースケースはカバーしていません。

4

2 に答える 2

1

値が一意であると仮定すると、ハッシュ ルックアップにより、辞書がセット内に存在するアイテムをチェックする最速の方法になることがよくあります。

格納された項目全体 (値) だけで直接の等価性チェックは必要なく、単にキーであり、これはフードの下の辞書によってハッシュとして処理されます。


Jon Skeet が述べたように、int を格納するだけで直接キーベースのルックアップが必要ない場合は、HashSet の方が適しています。

于 2013-04-04T21:03:58.267 に答える