0

オブジェクトの 2 つのリストを使用して、文字列キーに基づいて一意の項目の合計セットを保持したいと考えています。衝突は最初のリストから来て、ミスは 2 番目のリストから来ます。別の言い方をすれば、2 番目のリストにない最初のリストのアイテムを無視したいのですが、2 番目のリストに存在するすべてのアイテムと 2 番目のリストの残りのアイテムを保持したいと考えています。

これを行う最善の方法は何ですか?

編集:この問題は、単純な結合よりも微妙です。ユニオンは、2 つのリストの個別の項目を結合します。衝突の場合、外側のリストから項目を取得します。

私の場合、List1 には List2 に存在しないため保持したくないアイテムがいくつかありますが、リスト 2 のすべてのアイテムは保持したいと考えています。

以下を行うためのよりクリーンな/より短い方法はありますか?

var remaining = allowedItems.Except(recentItems)
var allowedRecentItems = recentItems.Intersect(allowedItems)
var result = allowedRecentItems.Concat(remaining);
4

4 に答える 4

2

これを試して:

var resultlist = list1.Union(list2);
于 2012-05-21T04:36:59.967 に答える
0
var list1 = new List<string>{"A", "B", "C"};
var list2 = new List<string>{"B", "C", "D"};
var list = list1.Union(list2);
于 2012-05-21T04:30:28.360 に答える
0

私の理解が正しければ、2 番目のリストのみを保持する必要があります。両方の条件が満たされることで

  • 2 番目のリストにない最初のリストのアイテムを無視したい

もちろん、2 番目のリストのみを保持する場合、2 番目のリストに存在しない最初のリストのすべての項目は自動的に無視されます。

  • 2 番目のリストに存在するすべてのアイテムと、2 番目のリストの残りのアイテムを保持したい

一方、両方のリストに存在するアイテムは、2 番目のリストにのみ存在するアイテムを含めて自動的に選択されます。

それが望ましくない場合は、 List.Distinct ()List.Except()、およびList.Union()拡張メソッドを確認する必要があります。

于 2012-05-21T05:08:15.360 に答える
0

2 番目のリストを使用するだけでうまくいきます。要件を直接翻訳すると、次の list1.Intersect(list2).Union(list2)結果が得られます。

于 2012-05-21T04:45:21.020 に答える