2012-02-27 45 views
3

我想排序一个List<string>,但同时排序float[]数组:这是相关的值。 (我知道这是糟糕的设计,这是历史性的)。因此,无论何时在List中交换两个项目,我都希望数组中索引的值也交换。有两种方法可以做到这一点:http://msdn.microsoft.com/en-us/library/aa311223%28v=vs.71%29.aspx 但是我找不到任何一个List和一个数组:有没有这样的方法?.NET排序列表<>与关联数组

+2

如果必须与'float []'配对,那么'List '没有太大的好处。坦率地说,我要么使用'string []'并使用双数组排序,或者(更可能)我会创建一个由'string'和'float组成的类型(可能是'struct') ',并且可以随意使用'List '(和'.Sort()')。 – 2012-02-27 11:14:02

回答

3

您可以使用Zip(.NET 4.0及更高版本)来合并列表和数组,并对结果执行排序。


更新:

由于您使用的是.NET 3.5,你可以使用Array.Sort,因为你已经链接到,第一列表转换为数组:

var stringArray = myStringList.ToArray(); 
Array.Sort(stringArray, myFloatArray); 

的方式我通常会这样做,但是,将创建一个类型为stringfloat,并将其用于泛型集合进行排序。

+0

有趣,但我们很遗憾使用了.NET3.5。 – user968698 2012-02-27 11:25:56

+0

@ user968698 - 答案更新为3.5个选项 – Oded 2012-02-27 11:34:29

0

Oded击败了我:我也打算建议将列表复制到一个SortedList<string, float>,然后使用.Keys获取排序的列表和.Values以按相应的顺序返回浮点数。这些不会返回实际的列表和数组,因此您可能需要.ToList.ToArray这些值,除非您可以使用结果作为IListIEnumerable来代替。

您也可以编写一个自定义的排序功能,将两个列表一起管理。或者只是咬紧牙关并重构代码以妥善保存这些内容!

0

或者,您可以ToArray您的列表并使用您在问题中提供的示例。当你完成后,然后new List<string>(stringArray)

不是我个人解决问题的方式,而是一个有效的选择。