Ich habe zwei Listen Liste, die ich in der dritten Liste kombinieren und doppelte Werte aus diesen Listen entfernen muss
Ein bisschen schwer zu erklären, also lassen Sie mich ein Beispiel zeigen, wie der Code aussieht und was ich als Ergebnis möchte. In einem Beispiel verwende ich den Int-Typ und nicht die ResultAnalysisFileSql-Klasse.
first_list = [1, 12, 12, 5]
second_list = [12, 5, 7, 9, 1]
Das Ergebnis der Kombination der beiden Listen sollte zu dieser Liste führen: result_list = [1, 12, 5, 7, 9]
Sie werden feststellen, dass das Ergebnis die erste Liste enthält, einschließlich der beiden "12" -Werte, und in second_list einen zusätzlichen Wert von 12, 1 und 5 enthält.
ResultAnalysisFileSql-Klasse
[Serializable]
public partial class ResultAnalysisFileSql
{
public string FileSql { get; set; }
public string PathFileSql { get; set; }
public List<ErrorAnalysisSql> Errors { get; set; }
public List<WarningAnalysisSql> Warnings{ get; set; }
public ResultAnalysisFileSql()
{
}
public ResultAnalysisFileSql(string fileSql)
{
if (string.IsNullOrEmpty(fileSql)
|| fileSql.Trim().Length == 0)
{
throw new ArgumentNullException("fileSql", "fileSql is null");
}
if (!fileSql.EndsWith(Utility.ExtensionFicherosErrorYWarning))
{
throw new ArgumentOutOfRangeException("fileSql", "Ruta de fichero Sql no tiene extensión " + Utility.ExtensionFicherosErrorYWarning);
}
PathFileSql = fileSql;
FileSql = ObtenerNombreFicheroSql(fileSql);
Errors = new List<ErrorAnalysisSql>();
Warnings= new List<WarningAnalysisSql>();
}
private string ObtenerNombreFicheroSql(string fileSql)
{
var f = Path.GetFileName(fileSql);
return f.Substring(0, f.IndexOf(Utility.ExtensionFicherosErrorYWarning));
}
public override bool Equals(object obj)
{
if (obj == null)
return false;
if (!(obj is ResultAnalysisFileSql))
return false;
var t = obj as ResultAnalysisFileSql;
return t.FileSql== this.FileSql
&& t.PathFileSql == this.PathFileSql
&& t.Errors.Count == this.Errors.Count
&& t.Warnings.Count == this.Warnings.Count;
}
}
Gibt es einen Beispielcode zum Kombinieren und Entfernen von Duplikaten?
quelle
cannot be inferred from the usage
Fehler führte.warum nicht einfach zB
oh ... laut msdn kannst du das weglassen
.Distinct()
quelle
Union hat keine gute Leistung: In diesem Artikel wird beschrieben, wie man sie miteinander vergleicht
Listen und LINQ-Zusammenführung: 4820 ms
Wörterbuch-Zusammenführung: 16 ms
HashSet und IEqualityComparer: 20 ms
LINQ Union und IEqualityComparer: 24 ms
quelle
Union
führt dies zu sauberem und besser lesbarem Code. Wenn Sie Zeit für die Hyperoptimierung von Code aufwenden, wenn dieser nicht langsam ist, kann dies später zu Wartungsarbeiten führen.Verwenden Sie Linqs Union:
quelle
quelle