5

これは、この ( C# リスト内の一意のアイテムをすべて取得する) の質問に何らかの形で関連しています。

ただし、上記の質問は値の単純な配列について話しています。サード パーティの Web サービスから返されたオブジェクトがあります。

public class X
{
    public Enum y {get; set;}

}

これらのオブジェクトのリストがありList<x> data;、合計で約 100 のレコードがありますが、可変です。ここで、プロパティのリストに可能なすべての値が必要でyあり、これをバインドしたいと考えていますCheckBoxList.DataSource(違いが生じる場合)。

これを行う最も効率的な方法は?

2 つのアルゴリズムを考えることができます。

var data = HashSet<Enum> hashSet = new HashSet<Enum>(xs.Select(s => s.y));
chkBoxList.DataSource = data;

または

var data = xs.Select(s => s.y).Distinct();
chkBoxList.DataSource = data;

私の直感は HashSet ですが、100% 確信はありません。

誰かがアイデアを持っている場合、より良いアイデアを受け入れますか?

4

2 に答える 2

3

1 回限りの操作の場合は、 を使用します。Distinct. 要素を何度も追加する場合は、使用しますHashSet

于 2013-10-10T13:07:08.587 に答える
2

1HashSetつは、ハッシュセットオブジェクトが構築された後もオブジェクトを保持するため、 foreach は高価な操作を必要としません。

一方、Distinct列挙子は、DataSource が列挙されるたびに評価される可能性が高く、重複する値を削除するすべての作業が繰り返されます。

于 2013-10-10T13:07:34.667 に答える