Как упорядочить целые числа по размеру и отслеживать их положение по имени переменной - PullRequest
1 голос
/ 04 ноября 2011

У меня есть программа с несколькими переменными типа int, в которой отдельные значения добавляются к конкретной переменной каждый раз, когда возникает условие сбоя.Я хочу, чтобы пользователь мог отслеживать, сколько сбоев в каждой категории они встретили при нажатии кнопки.Я хочу отобразить диапазон в сетке данных в порядке от целочисленного наивысшего значения до наименьшего.Мне также нужно отобразить в соседнем столбце название шага теста, которое относится к значению.Мой план состоял в том, чтобы использовать Array.sort для упорядочивания целых чисел, но затем я потерял их имена, поэтому не могу присвоить соседний строковый столбец.Я попытался использовать хеш-таблицу, но если я использую строку в качестве ключа, она сортируется в алфавитном порядке, а не численно, и если я использую целое число в качестве ключа, я получаю повторяющиеся записи, которые не добавляются в хеш-таблицу.Вот некоторые примеры, которые я пробовал, но у них есть вышеупомянутые проблемы.по сути, я хочу закончить двумя массивами, где порядок соответствует соглашению об именах и значениях.К вашему сведению, переменные были объявлены перед этим разделом кода, переменные, заканчивающиеся на x, являются строковым именем для (не x) значения целого числа.

    Hashtable sorter = new Hashtable();

      sorter[download] = downloadx;
      sorter[power] = powerx;
      sorter[phase] = phasex;
      sorter[eeprom] = eepromx;
      sorter[upulse] = upulsex;
      sorter[vpulse] = vpulsex;
      sorter[wpulse] = wpulsex;
      sorter[volts] = voltsx;
      sorter[current] = currentx;
      sorter[ad] = adx;
      sorter[comms] = commsx;
      sorter[ntc] = ntcx;
      sorter[prt] = prtx;

      string list = "";
      string[] names = new string[13];
      foreach (DictionaryEntry child in sorter)
      {
          list += child.Value.ToString() + "z";      
      }
      int[] ordered = new int[] { download, power, phase, eeprom, upulse, vpulse, wpulse, volts, current, ad, comms, ntc, prt };

      Array.Sort(ordered);
      Array.Reverse(ordered);


      for (int i = 0; i < sorter.Count; i++)
      {
          int pos = list.IndexOf("z");
          names[i] = list.Substring(0, pos);
          list = list.Substring(pos + 1);

      }

Первый вопрос здесь, так что надеюсь, что он не слишком длинный.

Спасибо

Ответы [ 2 ]

0 голосов
/ 04 ноября 2011

Вы хотите использовать

Dictionary <string, int> 

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

Вы спрашиваете об использовании.Какие из них у вас уже есть?

EDIT для .NET 2.0

Возможно, есть более элегантное решение, но вы могли бы реализовать логику, поместив строки вТаблица данных.Затем вы можете создать DataView для этой таблицы и отсортировать по любому столбцу, который вам нравится, по возрастанию или по убыванию.

См., Например, http://msdn.microsoft.com/en-us/library/system.data.dataview(v=VS.80).aspx.

EDIT для .NET 3.5 и выше

Что касается сортировки словаря по его значениям:

var sortedEntries = myDictionary.OrderBy(pair => pair.Value);

Если вам нужны результаты, чтобы стать словарем, вы можете вызвать .ToDictionary() для этого.Для обратного порядка используйте .OrderByDescending(pair => pair.Value).

0 голосов
/ 04 ноября 2011

Используйте словарь. И вы можете упорядочить его по значению: myDico.OrderBy (x => x.Value) .Reverse (), сортировка будет по убыванию. Вам просто нужно перечислить результат. Я надеюсь, что понимаю вашу потребность. В противном случае игнорируйте меня.

...