从arraylist中删除包含double数组的重复项

时间:2018-06-03 09:41:30

标签: c# arraylist duplicates

我有一个列表,其中包含双列数组,其项目是地理坐标,此列表包含重复的元素,我需要删除这些元素以仅保留唯一值

这是我试过的

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)的所有数组

我的列表中有一些元素会被复制,有人可以改进我的解决方案吗? 会很有帮助

3 个答案:

答案 0 :(得分:2)

此示例将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 your code:请注意,如果任何计算已用于这些数字,那么比较floatdouble将无效,因为二进制数不允许精度需要进行比较.. - 将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--;
         }
    }
}