c# - 按项目类型对数组进行排序

标签 c# arrays sorting

我有一个按类型排序的对象数组。该数组内是一组已按其首选相对顺序排列的同一类型的对象。排序后,这些对象被分组在一起,但不再按相同的顺序排列。我正在使用以下排序

Array.Sort(shapes, GetVisualComparer());

我一直在寻找一种 promise 保留原始顺序的排序方法,但一无所获。

我会注意到我有一个解决方法,但它给代码增加了不必要的困惑,并且不能解决将来出现的一般问题。

最佳答案

复制原始数组。然后,如果元素的类型相等,则让比较器比较元素的原始索引。

我不知道你的类型排序基于什么,但是按名称排序,它看起来有点像这样:

public class TypeComparer : IComparer<Type>
{
    public int Compare(Type x, Type y)
    {
        int result = StringComparer.InvariantCulture.Compare(x.Name, y.Name);
        if (result == 0)
        {
            result = Array.IndexOf(originalArray, x).CompareTo(Array.IndexOf(originalArray, y));
        }
        return result;
    }
}

关于c# - 按项目类型对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18220023/

相关文章:

c# - WPF 列表框选择已更改

c# - 使用引用其依赖项的构造函数创建动态类型

c# - 设置 PublicationMonitor.ConnectionContext 会引发 NullReferenceException

javascript - 根据对象数组中的属性过滤掉非空和未定义的项目

javascript - 金、银、铜的逻辑

c# - 如何找到 EXE 的安装位置 - 正确的方法?

php - 通过 PDO 查询将 MySQL 数据库的每一行存储在一个对象中?

java - 如何确定数组中是否还有未分配的值?

javascript - 按重要性对数组进行排序

r - 在R中对大型矩阵的每一行进行排序的最快方法