【发布时间】:2009-05-02 11:06:29
【问题描述】:
假设有一个这样的数组:
double [] numbers = new double[] {1,1,2,2,5,7,7,7};
我只想以一种省时的方式将不同的数字复制到一个新数组中(结果应该是数字 = {1,2,5,7})。我知道如何以一种时间效率低下的方式来做到这一点——通过查看下一个数字是否与前一个数字相同,如果是,则继续复制循环。还有其他方法吗?
【问题讨论】:
假设有一个这样的数组:
double [] numbers = new double[] {1,1,2,2,5,7,7,7};
我只想以一种省时的方式将不同的数字复制到一个新数组中(结果应该是数字 = {1,2,5,7})。我知道如何以一种时间效率低下的方式来做到这一点——通过查看下一个数字是否与前一个数字相同,如果是,则继续复制循环。还有其他方法吗?
【问题讨论】:
using System.Linq;
double[] newArray = numbers.Distinct().ToArray();
【讨论】:
如果您没有 Linq,可以执行以下操作:
List<double> uniques = new List<double>;
foreach (double num in numbers)
{
if (!uniques.Contains(num)) uniques.Add(num);
}
double[] uniquearray = uniques.ToArray();
【讨论】:
显然有必要检查列表中的每个元素来执行此操作。您描述的“时间效率低下”方式实际上已经是对您必须做的基本要素的描述。如果你想要一种方便的方式来实现它,Linq 已经定义了 Distinct() 运算符,然后你可以将其与 ToArray() 结合使用。
【讨论】: