[英]Removing duplicates from arraylist which contain array of double
我有一个具有双精度数组的列表,其项是地理坐标,此列表具有重复的元素,我需要删除这些元素以仅保留唯一值
这就是我尝试过的
IList<double[]> result = new List<double[]>(); /list declaration
// result gets value from a soap call
for (int i = 0; i < result.Count; i++)
{
for (int j = 0; j < result.Count; j++)
{
if (result[i][0].ToString() == result[j][0].ToString() || result[i][1].ToString() == result[j][1].ToString())
{
result.Remove(result[j]);
}
}
}
结果-我的列表中有多余的数组
基本上,我需要删除列表中具有相同值(x和y地理坐标)的所有数组
我仍然在列表中有一些元素被重复,有人可以改善我的解决方案吗? 会很大的帮助
本示例将data
的100减少到dataUnique
41
Random r = new Random(99);
var data = new List<Tuple<decimal, decimal>>();
for (int i = 0; i < 100; i++)
{
data.Add(new Tuple<decimal, decimal>(r.Next(7)/100m, r.Next(7)/100m));
}
var dataUnique = data.Distinct().ToList();
WRT代码:请注意,比较float
或double
,如果任何计算已被用于对这些数字的二进制数不允许做比较,所需要的精度将无法正常工作。 -不要更换double
用decimal
作为第一改进..
使用ToString()
可能会也可能无法解决该问题; 最好不要依靠它。
尝试这个:
result = result.GroupBy(r => new { val1 = r[0], val2 = r[1] })
.Select(g => new double[] { g.Key.val1, g.Key.val2 }).ToList();
IList<double[]> result = new List<double[]>(); /list declaration
// result gets value from a soap call
for (int i = 0; i < result.Count; i++)
{
for (int j = i + 1; j < result.Count; j++)
{
if (result[i][0].ToString() == result[j][0].ToString() && result[i][1].ToString() == result[j][1].ToString())
{
result.Remove(result[j]);
j--;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.