【问题标题】:Sorting a jagged array which contains null elements对包含空元素的锯齿状数组进行排序
【发布时间】:2011-03-27 04:49:15
【问题描述】:

我有一个像这样声明的锯齿状数组

int[][][] tmpA = new int[INT_WORKING_SIZE * 2][][];

我试图用这段代码对这个数组进行排序:

Array.Sort(tmpA, 0, INT_WORKING_SIZE*2, new MyArrayComparer());

和我的班级:

  public int Compare(object x,object y)
    {
        if (x == null || y == null)
            return 0;
        int[][] arrayA = (int[][])x;
        int[][] arrayB = (int[][])y;

         int resultA = arrayA[1].Sum();
         int resultB = arrayB[1].Sum();

        return resultA.CompareTo(resultB);          
    }

锯齿状数组的每一行有 2 个 12 个整数的数组。

我想通过添加第二个数组的所有 12 个整数来对数组进行排序,最小的应该是第一个。

但是我的主要问题是对象 x,y 通常为空,并且排序后的数组全为零。

有什么建议吗?

【问题讨论】:

  • 提示 - 循环、正确的 OOP、Helper 方法、arrayA[1].Sum()
  • 你有没有完全初始化tmpA?我看到你创建了第一个数组。但是该数组中的 2 个 12 数组呢?
  • 科比:谢谢。固定的! Jeff:tmpA 是另外两个锯齿状数组的组合。它被初始化。但是,在 tmpA 数组的中间有一个空条目。这是 null 是我在排序后得到所有 null 的原因吗??

标签: c# sorting jagged-arrays


【解决方案1】:

如果我对您的理解正确,您的问题是当任何一个数组为空时您返回 0,当您应该返回 1 或 -1(取决于哪个不为空)时返回 0,仅当两者都为空时返回 0。

public int Compare(object x,object y)
{
    // changed code
    if (x == null && y == null)
        return 0;
    if (x == null)
        return 1;
    if (y == null)
        return -1;
    // end of changed code
    int[][] arrayA = (int[][])x;
    int[][] arrayB = (int[][])y;

     int resultA = arrayA[1].Sum();
     int resultB = arrayB[1].Sum();

    return resultA.CompareTo(resultB);          
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    • 2017-03-14
    • 2023-01-10
    • 2011-12-31
    • 2020-12-21
    • 2015-02-17
    相关资源
    最近更新 更多