У меня есть процесс, который при запуске выводит уникальный идентификатор int и двойное значение, которое может не обязательно быть уникальным). Например:Сортировка идентификатора по значению и формирование строки
ID, Value 23, 56000 25, 67000 26, 67000 45, 54000
Я должен захватить эти и ранжировать идентификаторы путем за счет увеличения значения (меньше, чтобы больше), а затем сформируйте строку формы: id1, id2, id3 и т. д. Таким образом, в случае выше выход будет равен: 45; 26; 25; 23
Идентификационный номер не будет. скажем, 10 за проход.
Мой подход заключался в использовании хеш-таблицы для захвата значений. Код для сортировки ниже:
/// <summary>
/// Converts a hashtable (key is the id; value is the amount) to a string of the
/// format: x;y;z; where x,y & z are the id numbers in order of increasing amounts
/// cf. http://stackoverflow.com/questions/3101626/sort-hashtable-by-possibly-non-unique-values for the sorting routine
/// </summary>
/// <param name="ht">Hashtable (key is id; value is the actual amount)</param>
/// <returns>String of the format: x;y;z; where x,y & z are the id numbers in order of increasing amounts</returns>
public static string SortAndConvertToString(Hashtable ht)
{
if (ht.Count == 1)
return ht.Keys.OfType<String>().FirstOrDefault() +";";
//1. Sort the HT by value (smaller to bigger). Preserve key associated with the value
var result = new List<DictionaryEntry>(ht.Count);
foreach (DictionaryEntry entry in ht)
{
result.Add(entry);
}
result.Sort(
(x, y) =>
{
IComparable comparable = x.Value as IComparable;
if (comparable != null)
{
return comparable.CompareTo(y.Value);
}
return 0;
});
string str = "";
foreach (DictionaryEntry entry in result)
{
str += ht.Keys.OfType<String>().FirstOrDefault(s => ht[s] == entry.Value) + ";";
}
//2. Extract keys to form string of the form: x;y;z;
return str;
}
Я просто интересно, это наиболее эффективные способы ведения дел или есть более быстрый способ. Комментарии/предложения/примеры кода были высоко оценены. Спасибо. J.
Ваш пример вывода неверен. Это должно быть «45; 23; 26; 25». –