私は2つのリストを持って、彼らはこのC#List1.Union(LIST2) - カスタム比較
list1
ように見える今、私はそれらをマージしたい
CMD=stopped|ID=2222|TS=2017-06-30 8:19:20|AUF=4711|AG=010|Res=saguasgha|Mail=true|;
CMD=stopped|ID=6666|TS=2017-06-30 8:19:20|AUF=4711|AG=010|Res=saguasgha|Mail=true|;
が含まれてい
CMD=stopped|ID=1234|TS=2017-06-30 7:19:20|AUF=4711|AG=010|;
CMD=stopped|ID=1111|TS=2017-06-30 7:19:20|AUF=4711|AG=010|;
CMD=stopped|ID=2222|TS=2017-06-30 7:19:20|AUF=4711|AG=010|;
CMD=stopped|ID=3333|TS=2017-06-30 7:19:20|AUF=4711|AG=010|;
CMD=stopped|ID=4444|TS=2017-06-30 7:19:20|AUF=4711|AG=010|;
CMD=stopped|ID=5555|TS=2017-06-30 7:19:20|AUF=4711|AG=010|;
list2
が含まれていますIDのList3
という新しいリストに追加します。 LIST2はそうList3
の予想結果がこれです、同じIDでのList1のentrysを交換する必要があります。
CMD=stopped|ID=1234|TS=2017-06-30 7:19:20|AUF=4711|AG=010|;
CMD=stopped|ID=1111|TS=2017-06-30 7:19:20|AUF=4711|AG=010|;
CMD=stopped|ID=2222|TS=2017-06-30 8:19:20|AUF=4711|AG=010|Res=saguasgha|Mail=true|;
CMD=stopped|ID=3333|TS=2017-06-30 7:19:20|AUF=4711|AG=010|;
CMD=stopped|ID=4444|TS=2017-06-30 7:19:20|AUF=4711|AG=010|;
CMD=stopped|ID=5555|TS=2017-06-30 7:19:20|AUF=4711|AG=010|;
CMD=stopped|ID=6666|TS=2017-06-30 8:19:20|AUF=4711|AG=010|Res=saguasgha|Mail=true|;
私はList.Union
方法でこれを達成できる知っているが、これはハッシュコードを使用すると文字列が異なっていて、そのないので、ワーキング。だから、私はちょうどID
の比較を必要とする - 文字列の "属性"、それ以上はない。
私はGetHashCode()
とEquals()
をオーバーライドしなければならないと思いますが、私の目標を達成する方法はわかりません。
提案がありますか?
ありがとうございます!
は(IDを抽出するために、私はそのRegExExtraction("ID=",line)
と呼ばれる指定した文字列からID-値を返すメソッドを持っている)
// EDIT:あなたのアドバイスのための
おかげで、今それをやりましたこのように:
public class MyComparer : IEqualityComparer<string>
{
public bool Equals(string line1, string line2)
{
return RegExExtraction("ID=", line1) == RegExExtraction("ID=", line2);
}
public int GetHashCode(string obj)
{
return RegExExtraction("ID=", obj).GetHashCode();
}
private string RegExExtraction(string value, string toCheck)
{
return Regex.Match(toCheck, string.Format("{0}({1}){2}", Regex.Escape(value), ".+?", Regex.Escape("|"))).Groups[1].Value;
}
}
newList = list2.Union(list1, new MyComparer()).ToList();
[Concat]、[groupby] id –
[Equals()およびOperator ==]をオーバーライドするためのガイドライン(https://msdn.microsoft.com/en-us/library/ms173147(VS.90) .aspx) –