Сортировка набора пар числовых значений - есть ли .NET эквивалент хеш-карты в Java? - PullRequest
2 голосов
/ 07 февраля 2011

У меня несколько дней была ноющая проблема, вот что я пытаюсь сделать:

Я пишу программу, которая манипулирует различными наборами чисел несколькими способами, и пока все хорошо - теперь я управляю одним из таких вычислений с помощью цикла, так что каждый раз, когда он вращается, он выводит значение int x и int значение у.

Теперь x - это последовательность, полученная из счетчика, y - просто переменное число.

Итак, повторяю, у меня есть простой цикл чтения датаров

foreach (DataRow dr in dTable.Rows)
{
....
I output x and y (after some calculations)
....
}

Теперь я хотел бы получить эти два значения для каждой строки и в конце выполнить сортировку по значению y! Первоначально я просто собирался использовать хэш-карту, как я делал в java, и делать сортировку по значению, но мне трудно это сделать в c # в качестве datadictionary (я тоже не хочу использовать временную таблицу) позволяет сортировать по ключу (в моем случае x)

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

Или есть ли другой способ сделать эквивалент сортировки хеш-карты Java по значению?

Ответы [ 3 ]

2 голосов
/ 07 февраля 2011

Если значения y уникальны, то возможно:

var list = new SortedList<YType, XType>();
... Loop ...
     list.Add(yValue, xValue);

В этом случае ключи и сортируются по значениям y, но ключи должны быть уникальными.

Чтобы сделать вещи более сложными, SortedDictionary<,> это также также с ключами и сортировкой; хотя некоторые незначительные различия в O - дешевле ли добавить или получить и т. д.

1 голос
/ 07 февраля 2011

Создайте класс для представления вашей пары данных и сохраните все пары в каком-либо списке.Реализуйте IComparable для сортировки по второму значению и сортируйте его обычным способом (например, в Java, но его легко перевести на C #):

class DataPair implements Comparable { 
     int x;
     int y;

     public int compareTo(DataPair o) {
         return y - o.y;
     }
}

Составьте список DataPairs и отсортируйтес API библиотеки, когда вы закончите.Ваша реализация функции сравнения должна дать вам любой желаемый результат.

0 голосов
/ 07 февраля 2011

Я бы использовал LINQ для выполнения этого типа манипуляций, не используя структуры данных типа карты вообще:

var list = from dr in dTable.Rows
           let x = ComputeX(dr)
           let y = ComputeY(dr)
           orderby y
           select new { x, y };
...