【问题标题】:.NET Sort List<> with associated array.NET 排序列表<> 与关联数组
【发布时间】:2012-02-27 11:10:17
【问题描述】:

我想对List&lt;string&gt; 进行排序,但同时对float[] 数组进行排序:它们是关联的值。 (我知道这是糟糕的设计,它是如此具有历史意义)。因此,每当在 List 中交换两个项目时,我希望数组中索引处的值也交换。有一种方法可以使用两个数组:http://msdn.microsoft.com/en-us/library/aa311223%28v=vs.71%29.aspx 但是我找不到 List 和数组的任何东西:在某处有这样的方法吗?

【问题讨论】:

  • 如果必须与float[] 配对,拥有List&lt;string&gt; 并没有太多好处。坦率地说,我要么使用string[] 并使用双数组排序,要么(更有可能)创建一个由stringfloat 组成的类型(可能是struct),并且只需使用List&lt;ThatNewType&gt;(和.Sort())。

标签: .net arrays list generics sorting


【解决方案1】:

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


更新:

由于您使用的是 .NET 3.5,因此您可以使用链接到的Array.Sort,首先将列表转换为数组:

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

然而,我通常这样做的方式是创建一个包含 stringfloat 的类型,并在通用集合中使用它进行排序。

【讨论】:

  • 很有趣,但不幸的是我们使用的是 .NET3.5。
【解决方案2】:

Oded 打败了我:我还建议将列表复制到 SortedList&lt;string, float&gt; 中,然后使用 .Keys 将列表重新排序并使用 .Values 以相应的顺序将浮点数返回。这些不返回实际的列表和数组,因此您可能需要 .ToList.ToArray 的值,除非您可以将结果用作 IListIEnumerable

您还可以编写一个自定义排序函数来同时管理两个列表。或者只是硬着头皮重构代码以正确存储这些!

【讨论】:

    【解决方案3】:

    或者,您可以ToArray 您的列表并使用您在问题中提供的示例。完成后new List&lt;string&gt;(stringArray)

    不是我个人解决问题的方式,而是一种有效的替代方式。

    【讨论】:

      猜你喜欢
      • 2019-04-23
      • 1970-01-01
      • 2020-02-21
      • 2011-02-26
      • 2017-05-04
      • 2011-01-28
      • 1970-01-01
      • 2014-06-20
      相关资源
      最近更新 更多