我有一个对象数组,我将对象添加到(苏打饮料)中。我现在要构建一个从数组中删除特定对象的方法,我想确保对象始终放在数组中的任何空点之前(将null排序到最后)。
如何最有效地将空值/空点排序到像这样的数组中?
object[] bottleVector = new object[24];
// Constructor within class Sodacrate
class Soda
{
//CLASS VARIABLES
public string name;
public double price;
//CLASS CONSTRUCTOR
public Soda(string _name, double _price)
{
name = _name;
price = _price;
}
}
....
// Later in the code
public void add_soda()
{
//This is where I need help
bottles.Sort()
}
答案 0 :(得分:3)
您似乎正在寻找就地排序。
如果 vector ( C ++ ,而不是 C#概念)意味着数组,Soda[]
然后:
Soda[] bottles = ...
//TODO: lamda (left, right) => should return -1, 0 or 1
// depeding on if left < right, left == right, left > right
// sample below shows sorting by price
Array.Sort<Soda>(bottles, (left, right) => left.price.CompareTo(right.price));
如果 vector 是List<T>
那么(首选方式,因为你想删除项目):
List<Soda> bottles = ...
//TODO: lamda (left, right) => should return -1, 0 or 1
// depeding on if left < right, left == right, left > right
// sample below shows sorting by price
list.Sort((left, right) => left.price.CompareTo(right.price));
最后,您可以在IComparable<Soda>
类中实现Soda
接口(如果您只有一种排序Soda
类实例的默认方式):
public class Soda: IComparable<Soda> {
...
public int CompareTo(Soda other) {
if (object.ReferenceEquals(this, other))
return 0;
else if (null == other)
return 1;
//TODO: return -1, 0, 1 depending on if this <=> other
return price.CompareTo(other.price);
}
}
然后:
Soda[] bottles = ...
Array.Sort(bottle);
或(更好的方法):
List<Soda> bottles = ...
bottles.Sort();
答案 1 :(得分:2)
我发现您的代码存在很多问题。
object
的数组,而不是Soda
的数组。您始终要指定类型,以便可以访问该类的成员。如果您的List是object类型,则无法在不进行强制转换的情况下访问这些成员。 Soda
班级正在使用字段而不是属性。您可能希望使用properties。double
用于货币值this is what decimal
is for。下面代码应该:
List<Soda> sodaList = new List<Soda>();
// Constructor within class Sodacrate
public class Soda
{
//CLASS PROPERTIES
public string Name {get; set;}
public decimal Price {get; set;}
//CLASS CONSTRUCTOR
public Soda(string name, decimal price)
{
Name = name;
Price = price;
}
}
至于&#34;排序&#34;问题的一个方面。对我来说,它读取你希望你的数组排序,以便当你添加一个项目时,它将它放在数组中的特定位置。如果你使用List<Soda>
,你不必担心它插入的位置,因为没有预定义的大小,它只是按你添加它的顺序添加。但是,如果您确实需要按价格或名称排序,则可以轻松利用LINQ并使用OrderBy():
//Orders by Price in ascending order
sodaList = sodaList.OrderBy(x => x.Price);