Удаление дубликатов из массива, содержащих массив double - PullRequest
0 голосов
/ 03 июня 2018

У меня есть список с двойным массивом, элементы которого являются геокординатами, в этом списке есть повторяющиеся элементы, которые мне нужно удалить, чтобы сохранить только уникальные значения

это то, что я пробовал

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)

все же у меня есть некоторые элементы всписок, который дублируется, может кто-нибудь улучшить мое решение, пожалуйста?было бы здорово помочь

Ответы [ 3 ]

0 голосов
/ 03 июня 2018

В этом примере значение 100 в data уменьшается до 41 в 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();

. Запишите код: обратите внимание, что сравнение float или double не будет работать хорошо, если любое вычисление было использовано для этих чисел, поскольку двоичные числа не дают точности, необходимой для выполнения сравнений. - Замените double на decimal в качестве первого улучшения.

Использование ToString() может или не может помочь решить проблему;лучше не полагаться на это ..

0 голосов
/ 03 июня 2018
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--;
         }
    }
}  
0 голосов
/ 03 июня 2018

Попробуйте это:

result = result.GroupBy(r => new { val1 = r[0], val2 = r[1] })
               .Select(g => new double[] { g.Key.val1, g.Key.val2 }).ToList();
...