2009-05-02 28 views
1

Lets sagen, dass es ein Array ist wie folgt:Wie alle verschiedenen Elemente aus einem Array in C# kopieren

double [] numbers = new double[] {1,1,2,2,5,7,7,7}; 

Ich möchte ein neues Array nur die unterschiedlichen Zahlen kopieren (das Ergebnis sollte Zahlen = sein { 1,2,5,7}) in einer zeitsparenden Weise. Ich weiß, wie man es in einer Zeit ineffizient macht - indem ich suche, ob die nächste Nummer die gleiche wie die vorhergehende ist, und die Kopierschleife fortsetze, wenn sie es sind. Gibt es eine andere Art und Weise?

Antwort

2

Wenn Sie nicht Linq haben, können Sie wie folgt vorgehen:

List<double> uniques = new List<double>; 
foreach (double num in numbers) 
{ 
    if (!uniques.Contains(num)) uniques.Add(num); 
} 

double[] uniquearray = uniques.ToArray(); 
+0

Dies deckt auch den Fall, wenn die Liste ungeordnet ist. – ChrisF

7
using System.Linq; 

double[] newArray = numbers.Distinct().ToArray(); 
+0

+1, Beat mich darauf! – LukeH

+0

Ich mag diese Lösung, aber ich benutze nicht .NET 3.5 (vielleicht sollte ich anfangen) –

1

Offensichtlich ist es notwendig, jedes Element der Liste zu untersuchen, um dies zu tun. Die "ineffiziente Zeit", die Sie beschreiben, ist eigentlich bereits eine Beschreibung des Wesens dessen, was Sie tun müssen. Wenn Sie einen bequemen Weg dazu wünschen, definiert Linq bereits den Operator Distinct(), den Sie dann mit ToArray() kombinieren können.

Verwandte Themen