【问题标题】:C#: My Sorting Method/ Printing class does not print the first entryC#:我的排序方法/打印类不打印第一个条目
【发布时间】:2017-11-14 01:09:02
【问题描述】:

我已经实现了我自己的选择排序方法,它似乎在很大程度上完成了它的工作;但是,当我将文件打印到 Excel 工作表时,打印机不会打印第一项。我不确定排序方法是否是问题的根源。我的排序方法的测试方法通过了,这就是为什么我怀疑那是源。我的排序方法如下所示。它的范围或顺序或操作是否有错误?当我在纸上手动移动它时,一切都会正确排序。

    public bool sortMaterial() 
    {
        for (int i = 0; i < salesList.Count - 2; i++)
        {
            Sales curr = salesList[i];
            Sales temp;
            Sales min = curr;
            int swap = 0;

            for (int j = i + 1; j < salesList.Count; j++ )
            {
                temp = salesList[j];

                if (String.Compare(temp.material, min.material) == -1)
                {
                    min = temp;
                    swap = j;
                }
            }

            salesList[i] = min;
            salesList[swap] = curr;
        }

        return true;
    }

【问题讨论】:

  • 你的调试显示了什么?
  • for (int i = 0; i stackoverflow.com/questions/14768010/simple-bubble-sort-c-sharp例如。 Nikoo 的例子似乎是正确的......跳过其他 s{###[{# 代码:-)
  • 为什么这个方法返回一个总是正确的布尔值?似乎您希望它返回一个 void。
  • @LaurentLequenne 我不希望进行冒泡排序,因为它是一种非常低效的排序方法。当我使用 -1 而不是 -2 我的方法在我的测试中停止工作。我也曾认为 -1 是必要的,但当它不起作用时我感到很惊讶
  • 我不知道你正在实现什么样的排序......但它看起来像是冒泡排序的错误实现,它做得更少:-)

标签: c# excel visual-studio sorting


【解决方案1】:

进行自定义排序的一种巧妙方法是实现IComparer&lt;T&gt; interface

public class SalesMaterialComparer : IComparer<Sales>  {
    public int Compare(Sales x, Sales y) {
        return String.Compare(x.material, y.material);
    }
}

您可以将自定义比较器传递给 LINQ OrderBy() 方法。

IEnumerable<Sales> salesList;
var myComparer = new SalesMaterialComparer();

var sorted = salesList.OrderBy(s => s, myComparer);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多