在 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;
}
}
}
只需创建一个列表。这要容易得多。
//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进行比较。