如何根据大小排序整数并按变量名称跟踪它们的位置

时间:2011-11-04 00:24:32

标签: visual-studio c#-2.0

我有一个包含多个int变量的程序,每次遇到设置的失败条件时,都会将个别计数添加到特定变量中。我希望用户能够跟踪点击按钮时遇到的每个类别的失败次数。我想在数据网格视图中按从最高值整数到最低的顺序显示范围。我还需要在相邻列中显示与该值相关的测试步骤的名称。我的计划是使用Array.sort对整数进行排序,但是我失去了对其名称的跟踪,因此无法分配相邻的字符串列。我尝试使用哈希表,但如果我使用字符串作为键,它按字母顺序排序而不是数字,如果我使用整数作为键我得到重复的条目,不会添加到哈希表。这里是我尝试的一些例子,但他们有上述问题。本质上我想结束两个数组,其中顺序匹配命名和值约定。 FYI变量是在此段代码之前声明的,以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 :(得分:0)

使用字典。你可以通过以下值来命令它:myDico.OrderBy(x =&gt; x.Value)。反向(),排序将是数字递减。你只需要枚举结果。 我希望我明白你的需要。否则不要理我。

答案 1 :(得分:0)

您想要使用

Dictionary <string, int> 

存储你的号码。我不清楚你最后如何显示结果 - 你有网格还是列表控件?

您询问使用情况。你已经有哪些?

编辑 for .NET 2.0

可能有更优雅的解决方案,但您可以通过将行放在DataTable中来实现逻辑。然后,您可以创建该表的DataView,并按照您喜欢的列,升序或降序进行排序。

例如,请参阅http://msdn.microsoft.com/en-us/library/system.data.dataview(v=VS.80).aspx

.NET 3.5及更高版本

编辑

根据其值对字典进行排序:

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

如果您需要将结果作为词典,可以在其上调用.ToDictionary()。对于逆序,请使用.OrderByDescending(pair => pair.Value)