【问题标题】:c# How to find max value in an array containing objectsc#如何在包含对象的数组中找到最大值
【发布时间】:2022-01-14 10:44:04
【问题描述】:

我是编程新手,并且在我的应用程序中遇到了我真正陷入困境的地步。 我熟悉如何处理包含单个值和冒泡排序的数组,但现在我正在处理一个包含来自单独类的对象的数组,并希望从所有对象中的私有变量中找到最大值并将该对象打印到用户。 数组最初是空的,用户将用数据填充数组。 这是课程:

class SoldItem
    {
        private int uniqueId;
        private string itemName;
        private string artist;
        private string itemType;
        private decimal finalPrice;
        private decimal listingPrice;
        private int bidders;

        //Constructor
        public SoldItem(int uniqueId,
            string itemName,
            string artist,
            string itemType,
            decimal finalPrice,
            decimal listingPrice,
            int bidders)
        {
            this.uniqueId = uniqueId;
            this.itemName = itemName;
            this.artist = artist;
            this.itemType = itemType;
            this.finalPrice = finalPrice;
            this.listingPrice = listingPrice;
            this.bidders = bidders;
        }

        //Convert to string method
        public override string ToString()
        {
            return "Unique id: " + uniqueId +
                "\nItem name: " + itemName +
                "\nBy: " + artist +
                "\nType: " + itemType +
                "\nSold for: " + finalPrice +
                "\nAsking price: " + listingPrice +
                "\nBidders: " + bidders;
        }

        //Public method to access final price from other classes
        public decimal GetFinalPrice()
        {
            return finalPrice;
        }

    }

我想从中找到最高值的变量是 finalPrice,有什么想法可以解决这个问题吗?提前致谢。

感谢您的回答!我正在尝试实现我之前使用的冒泡排序方法,但要么我抛出了超出范围的异常,要么该方法有效,但只是打印出添加到数组中的最后一个对象,而不管它的 finalPrice 是什么。代码:

for (int i = 0; i < soldItems.Length - 1; i++)
            {
                if (soldItems[i] != null)
                {
                    for (int j = 0; j < soldItems.Length - i - 1; j++)
                    {
                        if (soldItems[j] != null)
                        {
                            if (soldItems[j].GetFinalPrice() > soldItems[i + 1].GetFinalPrice())
                            {
                                highestPrice = soldItems[j].GetFinalPrice();
                            }
                            else
                            {
                                highestPrice = soldItems[i].GetFinalPrice();
                            }
                        }
                    }
                }
            }
            Console.WriteLine(highestPrice);

有什么想法吗?上面的代码抛出了超出范围的异常。再次感谢,非常感谢!

【问题讨论】:

  • 欢迎使用 SO,您的冒泡排序方法也适用于此,但您需要针对您的用例对其进行一些扩展。现在您的冒泡排序比较 2 个数字,而不是这些数字,您只需要调用对象的 GetFinalPrice()
  • 你可能想让你的类实现the IComparable&lt;T&gt; interfaece;或者创建一个单独的类来实现the IComparer&lt;T&gt; interface,并将该类的一个实例传递给 sort 方法。

标签: c# arrays sorting object


【解决方案1】:

使用Linq

var soldItem = soldItems.MaxBy(soldItem => soldItem.GetFinalPrice());

【讨论】:

    【解决方案2】:
    SoldItem corvette67 = new SoldItem(/*initialize*/);
    SoldItem amDB4 = new SoldItem(/*initialize*/);
    ........
    ........
    .......
    DoBubbleSort(corvette67.GetFinalPrice(), amDB4.GetFinalPrice())
    {
        // sorting logic
    }
    

    要访问实例变量,您可以使用该类的对象(在本例中为corvette67amDB4)。 corvette67amDB4 是我们访问 SoldItem 非静态类变量的对象。如果要访问的是static 类型,可以使用类名来完成。例如:SoldItem.SomeStaticMethod()

    【讨论】:

      猜你喜欢
      • 2015-03-15
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多