2

这几天我一直有一个烦人的问题,这就是我正在尝试做的事情:

我正在编写一个程序,它以多种方式操作各种数字集,到目前为止一切都很好 - 现在我使用循环控制其中一个这样的计算,因此每次循环它都会输出一个 int 值 x 和一个 int 值 y。

现在 x 是连续的,从一个计数器派生而来,y 只是一个可变数字。

所以我再说一遍,我有一个简单的循环来读取数据行

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

现在我想为每一行获取这两个值,最后根据值 y 进行排序!最初我只是像以前在 java 中那样使用 hashmap 并按值进行排序,但我发现很难在 c# 中作为数据字典(我也不想使用临时表)允许您按键排序(在我的情况下为 x)

现在我应该采取什么方法?- 使用循环的输出对值作为数据表的输入?- 使用一个看起来很复杂但最终是维持 x 和 y 之间对关系的唯一方法的二维数组?

或者有没有其他方法可以做相当于按值排序的java hashmap?

4

3 回答 3

2

如果 y 值是唯一的,那么可能:

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

然后按 y 值进行键控和排序,但键必须是唯一的。

让事情变得更复杂,也是SortedDictionary<,>keyed和sorted;不过,O 中的一些细微差别 - add 或 fetch 是否最便宜等。

于 2011-02-07T15:59:31.887 回答
1

创建一个类来表示您的数据对并将所有对存储在某种列表中。实现IComparable对第二个值进行排序,并以通常的方式对其进行排序(Java 中的示例,但应该很容易转换为 C#):

class DataPair implements Comparable { 
     int x;
     int y;

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

制作一个 DataPairs 列表,并在完成后使用库 API 对其进行排序。您对比较函数的实现应该会给您想要的任何结果。

于 2011-02-07T16:00:23.350 回答
0

我会使用 LINQ 进行这种类型的操作,根本不使用映射类型的数据结构:

var list = from dr in dTable.Rows
           let x = ComputeX(dr)
           let y = ComputeY(dr)
           orderby y
           select new { x, y };
于 2011-02-07T16:05:15.387 回答