我有一个列表,其中包含双列数组,其项目是地理坐标,此列表包含重复的元素,我需要删除这些元素以仅保留唯一值
这是我试过的
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 geocordinates)的所有数组我的列表中有一些元素会被复制,有人可以改进我的解决方案吗? 会很有帮助
答案 0 :(得分:2)
此示例将data
中的100减少到dataUnique
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 your code:请注意,如果任何计算已用于这些数字,那么比较float
或double
将无效,因为二进制数不允许精度需要进行比较.. - 将double
替换为decimal
作为第一个改进..
使用ToString()
可能会或可能不会帮助克服这个问题;最好不要依赖它..
答案 1 :(得分:1)
试试这个:
result = result.GroupBy(r => new { val1 = r[0], val2 = r[1] })
.Select(g => new double[] { g.Key.val1, g.Key.val2 }).ToList();
答案 2 :(得分:1)
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--;
}
}
}