2

在 C# 中从数组中“删除”元素时遇到问题,但没有使用 System.Collection 和 LINQ

例如:

我有一个Product包含 fields 的类p_namep_number并且is_useful(默认情况下是这个值true);

我还有一个ShoppingCart包含 field 的类market_nameproducts_quantity并且Products(类型是Product[],存储所有产品)

假设我创建了四个Product对象p1, p2, p3, p4,然后创建了一个具有固定长度的ShoppingCart对象(, , &存储它);scProducts[4]p1p2p3p4

然后我将 的is_useful值设置p2false,这样p2在 中Products[4]就变得无用了ShoppingCart,需要从 中去掉Products[4]

有没有可能remove p2from Products[4],这个数组的长度会减少到3(Products[3]with p1, p3& p4inside),并且它仍然属于Shoppingcart对象sc(就像我sc.Products用来获取所有产品时,它会引用新的Products[3]) ?

谢谢!

4

2 回答 2

5

使用Array.Resize静态方法:

  • 用最后一个替换您要删除的元素
  • Array.Resize使用您的数组引用和长度设置为当前长度调用- 1
// let's say you'd like to remove the i-th element
//
// You don't have to move Products[i] to the last position,
// because it will be removed anyway.
sc.Products[i] = sc.Products[sc.Products.Length - 1];
// Call Array.Resize to change array size
Array.Resize(sc.Products, sc.Products.Length - 1);
于 2013-09-08T13:22:54.627 回答
1

这是我头顶的方式:

  1. 将元素设置为 null (并将其移至 end :可选),并在访问代码中处理 null 值。(您也可以为此使用包装方法/类) adv:这不涉及任何对象重新分配、重新分配。

  2. Array.Resize(): 涉及数组重新分配,但如果您的数组很短并且操作非常不频繁,您可以使用此解决方案。http://msdn.microsoft.com/en-us/library/bb348051.aspx

  3. 使用集合:适用于动态大小的列表/数组。

于 2013-09-08T13:38:52.840 回答