1

ここで詳しく説明します。

public class Season
    {
        #region Public Variables

        private int _id;
        private string _seasonName;
        private int _startMonth;

        #endregion

        #region Public Properties 

        public int Id
        {
            get { return _id; }
            set { _id = value; }
        }

        public int StartMonth
        {
            get { return _startMonth; }
            set { _startMonth = value; }
        }

        public string SeasonName
        {
            get { return _seasonName; }
            set { _seasonName = value; }
        }

        #endregion

        #region Public Constructor

        public Season()
        {
            this._initialize();
        }

        public Season(string pSeasonName, int _pStartMonth,int pID)
        {
            this._initialize(pSeasonName, _pStartMonth, pID);
        }

        #endregion

    }

次に私は以下のように持っています

IList<Season> seaosns = new List<Season>();
seaosns.Add(new Season("Summer", 4, 1));
seaosns.Add(new Season("Winter", 6, 2));
seaosns.Add(new Season("MidSummer", 10, 1));

ここで、ID が Ilist 項目で繰り返されているかどうかを確認する必要があります。これは For ループを使用して行うことができますが、他の解決策があるかどうかを知る必要があります。

前もって感謝します。

4

4 に答える 4

4

リストの代わりにHashSetを使用してください。セットは、重複する要素を含まず、要素が特定の順序になっていないコレクションです。シーズンの一意性を判断するために、カスタム IEqualityComparer を提供できます。

var seaosns = new HashSet<Season>(seasonsEqualityComparer);
seaosns.Add(new Season("Summer", 4, 1));
seaosns.Add(new Season("Winter", 6, 2));
seaosns.Add(new Season("MidSummer", 10, 1)); // returns false...
于 2012-05-30T06:44:36.443 に答える
4

これを行う最も適切な方法は、辞書のキーとしてDictionary<int,Season>一意のプロパティ ( ) を使用して、アイテムを (代わりに、または追加で) に格納することです。Id次に、O(1)存在をテストし、キーでフェッチするためのルックアップがあります ( Id)。ただし、ディクショナリは順序付けされていないことに注意してください。つまり、挿入順序またはキー順序のいずれかを尊重することを保証するものではありません。順序は定義されていないため、特定の順序でそれらが必要な場合は、個別に保持する必要がある場合があります。

于 2012-05-30T06:44:39.650 に答える
3

IDictionaryの代わりに を使用できます。その場合IList、キーの重複は許可されません。キーとして使用できSeason.Idます。aLookupを使用すると要素を複製できるため、キーを繰り返して、関連付けられている要素の数を確認できます。

于 2012-05-30T06:46:41.820 に答える
0

を確認したいだけなら、これを試してください:

var hasDuplicates = list.GroupBy(season => season.Id).Any(groupping => groupping.Count() > 1);  

ただし、最初は重複のないコレクションを取得する場合は、他の人が言ったように HashSet または Dictionary を使用するか、Collection からサブクラスを作成して、重複を追加できないようにします。

于 2012-05-30T06:51:59.683 に答える