【问题标题】:Exchange sorting List C#交换排序列表 C#
【发布时间】:2016-02-22 14:38:32
【问题描述】:

它跳过 if (newklädDataList[minst].märke.CompareTo(newklädDataList[j].märke) > 0),我不知道为什么,有人能发现问题吗?

public static void SortByMärke()
    {
        for (int i = 0; i < newklädDataList.Count; i++)
        {
            int minst = 1;
            for (int j = i + 1; j < newklädDataList.Count; j++)
            {
                if (newklädDataList[minst].märke.CompareTo(newklädDataList[j].märke) > 0)
                {
                    minst = j;
                }
            }
            if (i < minst)
            {
                Swap(minst, i);
            }
        }
    }

【问题讨论】:

  • “跳过”到底是什么意思?跳过检查?还是条件永远不会成立?
  • 集合的类型是什么,märke的类型是什么?
  • 您的交换排序可能有误。
  • 问一个更具体的问题。这不是用于查找错误的服务。如果像 CompareTo 这样的方法返回了一些意想不到的结果,那么请给我们更多信息,比如您正在比较的内容以及为什么比较不符合您的预期。
  • 它不起作用,因为 int minst = 1 而不是 i。我超级尴尬。菜鸟失误。

标签: c# list sorting if-statement


【解决方案1】:

我不知道你是如何实现你的 Märk 类的,但我可以不用它,我会尝试为你提供一种更优化的方式来实现 Sort 函数。我认为我们应该超越 .Net 1.0 并转向另一个框架,所以尽可能快地采用最后一个。 下面是添加到您的 Märk 类的一些代码,然后使用魔杖在列表中实现 Sort 方法,这一切都完成了。

public class Märk : IEquatable<Märk>, IComparable<Märk>
    {
        public int Id { get; set; }

        public string Value { get; set; }

        public override string ToString()
        {
            return "ID: " + Id + "   Value: " + Value;
        }

        public int Sort(string value1, string value2)
        {
            return value1.CompareTo(value2);
        }

        public int CompareTo(Märk compareMärk)
        {
            if (compareMärk == null)
            {
                return 1;
            }
            else
            {
                return Id.CompareTo(compareMärk.Id);
            }
        }

        public override int GetHashCode()
        {
            return Id;
        }

        public bool Equals(Märk other)
        {
            if (other == null) return false;
            return (this.Id.Equals(other.Id));
        }

        //...Add somme other codes
    }

现在看看怎么用

 List<Märk> newklädDataList = new List<Märk>();


            // Add newklädDataList to the list.
            newklädDataList.Add(new Märk() { Value = "regular seat", Id = 9 });
            newklädDataList.Add(new Märk() { Value = "crank arm", Id = 5 });
            newklädDataList.Add(new Märk() { Value = "shift lever", Id = 6 }); ;
            // Name intentionally left null.
            newklädDataList.Add(new Märk() { Id = 2 });
            newklädDataList.Add(new Märk() { Value = "banana seat", Id = 4 });
            newklädDataList.Add(new Märk() { Value = "cassette", Id = 3 });

            Console.WriteLine("\nBefore sort:");
            foreach (Märk märk in newklädDataList)
            {
                Console.WriteLine(märk);
            }

            Console.WriteLine("----------------------------------------------------------------------------------------\r\r\r");
            newklädDataList.Sort();


            Console.WriteLine("\nAfter sort by Märk Id:");
            foreach (Märk märk in newklädDataList)
            {
                Console.WriteLine(märk);
            }

            Console.ReadLine();

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2016-01-26
    • 1970-01-01
    • 2012-02-17
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多