0

オブジェクトの 2 つのリストを比較するために現在構築中のメソッドがあります。リスト自体にオブジェクトが含まれています

List<TradeFile> list1
List<TradeFile> list2

list1 の TradeFile オブジェクトと list2 の TradeFile オブジェクトの比較が終了したら、比較したすべての TradeFile と一致するステータスを含むコレクションを返したいと考えています。したがって、次のようになります。

TradeFile1、TradeFile2、True TradeFile1、TradeFile2、False

このコレクションは、プロセスの後半でレポートに使用します。tradefile オブジェクトのコレクションを含む辞書のようなものを使用する必要がありますか?

これはうまくいくかもしれませんが、実際には面倒です:

Dictonary<Dictonary<TradeFile,TradeFile>,bool>

編集:これは、以下の回答に基づいて最終的にどのように見えるかです。

private List CompareTradeFileObject(List list1, List list2) { List results = new List(); ブール一致 = false;

        if (list1.Count == list2.Count)
        {
            list1.Sort((x, y) => x.FormatName.CompareTo(y.FormatName));
            list2.Sort((x, y) => x.FormatName.CompareTo(y.FormatName));

            for (int i = 0; i < list1.Count; i++)
            {
                TradeFileCompare tf = new TradeFileCompare();
                tf.TradeFile1 = list1[i];
                tf.TradeFile2 = list2[i];

                if (list1[i].FileExtension == list2[i].FileExtension && list1[i].FormatName == list2[i].FormatName &&
                    list1[i].GroupName == list2[i].GroupName && list1[i].MasterAccountId == list2[i].MasterAccountId)
                {
                    matches = CompareTradeFileContents(list1[i].FileContents, list2[i].FileContents);
                    tf.IsMatch = matches;

                }
                else
                {
                    tf.IsMatch = matches;
                }

                results.Add(tf);
            }
        }
        else
        {
            matches = false;
        }

        return results;
    }

class TradeFileCompare
{
    public TradeFile TradeFile1 { get; set; }
    public TradeFile TradeFile2 { get; set; }
    public bool IsMatch { get; set; }
}
4

3 に答える 3

3

最もクリーンな方法は、戻り値の型のクラスを作成し、このクラスのリストを返すことです。

または、これには Tuple クラスを使用できます。

List<Tuple<TradeFile, TradeFile, bool>>
于 2012-07-10T23:13:58.647 に答える
2
void Main()
{
    var list1 = new List<TradeFile>(new [] {
        new TradeFile { Name = "TradeFile1", Data = "a" },
        new TradeFile { Name = "TradeFile2",  Data = "b" },
    });

    var list2 = new List<TradeFile>(new [] {
        new TradeFile { Name = "TradeFile4",  Data = "a" },
        new TradeFile { Name = "TradeFile5",  Data = "c" },
    });

    var query = from tradeFile1 in list1
                from tradeFile2 in list2
                select new TradeFileComparison(tradeFile1, tradeFile2);

    foreach (var item in query)
    {
        Console.WriteLine(item.ToString());
    }
}

class TradeFile
{
    public string Name { get; set; }

    public string Data { get; set; }

    public bool Matches(TradeFile otherTradeFile)
    {
        return (this.Data == otherTradeFile.Data);
    }
}

class TradeFileComparison
{
    public TradeFileComparison(TradeFile tradeFile1, TradeFile tradeFile2)
    {
        this.TradeFile1 = tradeFile1;
        this.TradeFile2 = tradeFile2;
    }

    public TradeFile TradeFile1 { get; set; }

    public TradeFile TradeFile2 { get; set; }

    bool IsMatch { get { return this.TradeFile1.Matches(TradeFile2); } }

    public override string ToString()
    {
        return string.Format("{0}, {1}, {2}", 
            this.TradeFile1.Name, this.TradeFile2.Name, 
            this.IsMatch.ToString());
    }
}

出力:

TradeFile1, TradeFile4, True
TradeFile1, TradeFile5, False
TradeFile2, TradeFile4, False
TradeFile2, TradeFile5, False
于 2012-07-10T23:44:23.910 に答える
0

取引ファイルに ID がある場合は、単に返すことができます

 List<int, bool>

int は一意の ID、bool は等しい場合

于 2012-07-10T23:42:42.613 に答える