当前位置:  开发笔记 > 编程语言 > 正文

如何根据存储在单独数组中的值对键数组进行排序

如何解决《如何根据存储在单独数组中的值对键数组进行排序》经验,为你挑选了1个好方法。

如何根据存储在C#中单独数组中的值对键数组进行排序

int[] keys = new int[] {1, 2, 3, 4, 7};
double[] vals = new double[] {0.5, 0.2, 0.3, 0.1, 0.4};

我想根据vals数组中的值对键数组进行排序.在keys数组中获取以下顺序:

4, 2, 3, 7, 1

我试图做以下事情

Array.Sort(keys, (a, b) => vals[a].CompareTo(vals[b]));

但是我收到以下错误:

Additional information: Unable to sort because the IComparer.Compare() method returns inconsistent results. Either a value does not compare equal to itself, or one value repeatedly compared to another value yields different results. IComparer: 'System.Array+FunctorComparer`1[System.Int32]'.

我猜a和b参数是指键值而不是键数组中的键索引.



1> Enigmativity..:

这对你有用吗?

int[] sorted =
    vals
        .Zip(keys, (v, i) => new { v, i })
        .OrderBy(x => x.v)
        .Select(x => x.i)
        .ToArray();

这给出了这个结果:

结果

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有