在 C# 中对数组列表进行排序

本文关键字:排序 列表 数组 | 更新日期: 2023-09-27 18:32:55

我正在使用 c# 语言并在基于控制台的应用程序上执行此操作。我遇到的问题是按字母顺序排序。我自己添加产品和数量,因此没有固定的数组列表。我想知道如何根据我在控制台中输入的内容对其进行排序。这有意义吗?我将在哪里输入代码来执行此操作?我已经尝试过,正如你在这里看到的那样,我突出显示了它。但它会出现诸如 {"指定的强制转换无效"和"从数字转换时,值必须小于无穷大。

编辑:该程序现在仅显示描述和价格,我正在尝试让它也显示数量。 我尝试输入"int q"然后数量 = q,但我收到"错误 2 类型'TheosVendingMachine.Goods'的错误已经定义了一个名为'商品'的成员具有相同的参数类型!

     public string getDescription()
    {
        return this.description;
    }
    public double getPrice()
    {
        return this.price;
    }
   public int getQuantity()
    {
        return this.quantity;
    }
    //a simple constructor
    public Merchandise(string n, double id )
  * { description = n; price = id;  }*

    // a simple ToString, always good to have around!
    public override string ToString()
    { return description + " (£ " + price + ")" + quantity; }

 public class Merchandise
{
    private string description;
    private double price;
    public Merchandise(string aDescription, double aPrice)
    {
        this.description = aDescription;
        this.price = aPrice;
    }
    public string getDescription()
    {
        return this.description;
    }
    public double getPrice()
    {
        return this.price;
    }
    public override bool Equals(object other)
    {
        bool result;
        if (other == null)
        {
            result = false;
        }
        else
        {
            Merchandise merchandise = (Merchandise)other;
            result = (this.description.Equals(merchandise.description) && this.price == merchandise.price);
        }
        return result;
    }
 public override string ToString()
    {
        return this.description + " at £ " + this.price;
    }
}

}

在 C# 中对数组列表进行排序

只需创建一个列表。这要容易得多。

//Instantiate List
List<string> itemList = new List<string>();
//Create List
itemList.Add("Zomato");
itemList.Add("Carrot");
itemList.Add("Banana");
//Sort List
itemList.Sort();
//Display List
foreach(string item in itemList){
    Console.WriteLine(item);
}
Console.ReadKey();

即使您使用老式的ArrayList,您仍然可以使用它的Sort方法,前提是您的类IComparable .

由于您尚未向我们展示班级Merchandise我只能向您展示一个例子。

这是您的商品类与制造IComparable

public class Merchandise : IComparable
{
    private string description;
    private double price;
    private int quantity;
    public Merchandise(string aDescription, double aPrice)
    {
        this.description = aDescription;
        this.price = aPrice;
    }
    public Merchandise(string aDescription, double aPrice, int aQuantity)
    {
        this.description = aDescription;
        this.price = aPrice;
        this.quantity = aQuantity;
    }
    public string getDescription()  {  return this.description;  }
    public double getPrice()        {  return this.price;        }
    public int getQuantity()        {  return this.quantity;     }
    public override bool Equals(object other)
    {
        bool result;
        if (other == null) result = false;
        else
        {
            Merchandise merchandise = (Merchandise)other;
            result = (this.description.Equals(merchandise.description)
                      && this.price == merchandise.price);
        }
        return result;
    }
    public int CompareTo(object o2)
    {
        if (o2 == null) return 1;
        Merchandise m2 = o2 as Merchandise;
        if (m2 != null) return this.description.CompareTo(m2.description);
        else throw new ArgumentException("Object is not Merchandise ");
    }

    public override string ToString()
    {
        return description + " (£ " + price + ")" + quantity; 
    }
}

尤其要注意CompareTo方法! IComparable只需要 tis 方法,现在您可以在类上使用ArrayList.Sort。if 非常简单,因为它可以依赖于字符串成员来Comparable

更复杂的比较将直接编码;在您的程序中,您可能希望使用Name成员而不是ID进行比较。