1

辞書 ld1 と ld2 のリストがあるとします。どちらにもいくつかの共通の辞書オブジェクトがあります。辞書オブジェクト「a」が両方のリストにあるとします。同じオブジェクトが両方のリストにあるように、辞書のリストをマージしたいのですが、マージされたリストには一度だけ来るはずです。

4

4 に答える 4

2

LINQ.Unionはうまく動作するはずです。

oneList.Union(twoList)

が必要な場合は、結果Listを呼び出すだけです。ToList()

于 2012-07-05T03:45:29.603 に答える
1

リストをマージする場合は、Enumerable.Union

ld1.Union(ld2)
于 2012-07-05T03:51:53.757 に答える
0

カスタム オブジェクトまたはクラスを使用している場合、単純な enumerable.Union は機能しません。

カスタム比較子を作成する必要があります。

これを行うには、IequalityComparer を実装する新しいクラスを作成し、次のように使用します。

oneList.Union(twoList, customComparer)

コードサンプルを以下に示します。

public class Product
{
    public string Name { get; set; }
    public int Code { get; set; }
}

// Custom comparer for the Product class
class ProductComparer : IEqualityComparer<Product>
{
    // Products are equal if their names and product numbers are equal.
    public bool Equals(Product x, Product y)
    {

        //Check whether the compared objects reference the same data.
        if (Object.ReferenceEquals(x, y)) return true;

        //Check whether any of the compared objects is null.
        if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
            return false;

        //Check whether the products' properties are equal.
        return x.Code == y.Code && x.Name == y.Name;
    }

    // If Equals() returns true for a pair of objects 
    // then GetHashCode() must return the same value for these objects.

    public int GetHashCode(Product product)
    {
        //Check whether the object is null
        if (Object.ReferenceEquals(product, null)) return 0;

        //Get hash code for the Name field if it is not null.
        int hashProductName = product.Name == null ? 0 : product.Name.GetHashCode();

        //Get hash code for the Code field.
        int hashProductCode = product.Code.GetHashCode();

        //Calculate the hash code for the product.
        return hashProductName ^ hashProductCode;
    }

}

詳細な説明は、次のリンクに示されています。

http://msdn.microsoft.com/en-us/library/bb358407.aspx

于 2012-07-05T04:53:13.593 に答える
-1
Dictionary<int, string> dic1 = new Dictionary<int, string>();
dic1.Add(1, "One");
dic1.Add(2, "Two");
dic1.Add(3, "Three");
dic1.Add(4, "Four");
dic1.Add(5, "Five");

Dictionary<int, string> dic2 = new Dictionary<int, string>();
dic2.Add(5, "Five");
dic2.Add(6, "Six");
dic2.Add(7, "Seven");
dic2.Add(8, "Eight");

Dictionary<int, string> dic3 = new Dictionary<int, string>();
dic3 = dic1.Union(dic2).ToDictionary(s => s.Key, s => s.Value);

結果は、重複するキー値(5、 "Five")が削除された8つの値を持つdic3です。

于 2012-07-05T04:13:50.570 に答える