順序を維持すると主張する記事は、まったく間違っていると思います。単純なテストでは、内部構造により挿入順序が維持される場合がありますが、保証されておらず、常にそのように機能するとは限りません。反例を考えてみます。
編集:反例は次のとおりです。
using System;
using System.Collections.Generic;
class Test
{
static void Main()
{
var set = new HashSet<int>();
set.Add(1);
set.Add(2);
set.Add(3);
set.Remove(2);
set.Add(4);
foreach (int x in set)
{
Console.WriteLine(x);
}
}
}
これは、3 が 4 の前に挿入されているにもかかわらず、1、4、3 を出力します。
アイテムを削除しないと、挿入順序が保持される可能性があります。よくわかりませんが、まったく驚かないでしょう。ただし、それに頼るのは非常に悪い考えだと思います。
- そのように動作するように文書化されておらず、ドキュメントにはソートされていないと明示的に記載されています。
- 私は内部構造やソース コード (明らかに持っていません) を見ていません。
- 実装は、フレームワークのバージョン間で非常に簡単に変更できます。これに依存することは、変更されていない実装に依存するようなものです..NET 1.1の時代に何人かの人々がそれを行い、.NET 2.0で実装が変更さ
string.GetHashCode
れたときにやけどを負いました.