是否支持基于索引的排序?

时间:2009-03-18 19:58:47

标签: c# indexing sorting

是否有内置的C#支持进行索引排序?

更多详情:
我有几组数据存储在单个通用的double列表中。 这些列表的长度始终相等,并保存相应的数据项,但这些列表是动态的,所以我不能只是干净地将相应的数据项存储在类或结构中。 (我也在处理一些遗留问题。)

我需要能够从任何一个数据集中对这些键控进行排序。

我想到最好的方法是添加一个间接级别,并使用基于索引的排序。这种类型已经使用多年了。

快速定义基于索引的排序
make“index”,一个与列表长度相同的连续整数数组,然后排序算法对整数列表进行排序,以便anylist[index[N]]按排序顺序给出任意列表的第N项。列表本身从未被重新订购。

是否有内置的C#支持进行索引排序? 我一直无法找到它...我发现的所有内容都重新整理了这个集合。我的猜测是支持存在,但我还没有找到合适的位置。

我在Windows下使用C#.NET 3.5。

2 个答案:

答案 0 :(得分:13)

设置索引数组后,可以使用自定义Comparison<T>对其进行排序,该自定义Array.Sort<int>(index, (a,b) => anylist[a].CompareTo(anylist[b])); 比较数据数组中相应项目中的值:

{{1}}

答案 1 :(得分:0)

以下代码实现了索引排序。请注意ToArray()调用以克隆数据数组。如果省略,数据数组也会被排序。

static void Main(String[] args)
{
   Int32[] data = new Int32[] { -6, 6, 5, 4, 1, 2, 3, 0, -1, -2, -3, -4, -5 };

   Int32[] indices = Enumerable.Range(0, data.Length).ToArray();

   Array.Sort(data.ToArray(), indices);

   foreach (Int32 index in indices)
   {
       Console.Write(String.Format("{0} ", data[index]));
   }

   Console.ReadLine();
}

输出如预期的那样。

-6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6