0

不要なコードは残したくありませんが、「安全」でもありたいと考えています。経験的な観察によると、以下の OrderBy は何もしないことが示されています。List は既に正しく並べられています。その場合に頼って、その OrderBy 行を削除できますか?

HashSet<int> hashSet = new HashSet<int>();
List<int> listInts = new List<int>();
using (var file = new System.IO.StreamReader(selectedFile)) {
    string line;
    int lineNum = 0;
    int Offset = (int)numericUpDownLinesOfContext.Value;
    while ((line = file.ReadLine()) != null)     {
        lineNum++;
        if (line.Contains(PlatypusToSearchFor)) {
            // This adds the lines before and after that will provide the desired context
            // (N lines from the log file before and after the searched for value)
            hashSet.UnionWith(Enumerable.Range(lineNum - Offset, Offset * 2 + 1));
        }
    }
    // Remove any negative numbers, as well as 0, that might have been added 
    // (0, -1, -2, or -3 are all possibilities, but the first line is #1)
    listInts = hashSet.Where(i => i >= 1).ToList();
    // They seem to be ordered correctly already, but this is just in case:
    listInts = listInts.OrderBy(i => i).ToList();
}
4

3 に答える 3

5

いいえ、削除しないでくださいOrderByHashSet特定の順序を保証するものではありません。テストで幸運に恵まれるかもしれませんが、期待どおりに順序付けされることを保証することはできません。

HashSet(http://msdn.microsoft.com/en-us/library/bb359438.aspx)の MSDN ドキュメントから:

セットは、重複する要素を含まず、要素が特定の順序になっていないコレクションです。

(強調追加)

于 2012-06-04T18:19:49.903 に答える
3

すでに述べHashSetたように、特定の順序はありません。SortedSetその動作が必要な場合は、代わりに を使用できます。その場合、 は必要ありませんOrderBy

于 2012-06-04T18:25:51.423 に答える
2

UnionWith操作は順序を保持しません。OrderByただし、.NETはセット操作と自動ソート動作を公開するSortedSet<T>クラスを提供するため、この行を使用する必要もありません。

于 2012-06-04T18:27:11.227 に答える