数组内的列表对象,如何处理
本文关键字:何处理 处理 列表 对象 数组 | 更新日期: 2023-09-27 17:51:21
我有两个类:
public class Order
{
public int ID { get; set; }
public int Output { get; set; }
public int Wharf { get; set; }
public int PartOf { get; set; }
public int[] Product { get; set; }
public int[] Quantity { get; set; }
public int[] Storage { get; set; }
public override bool Equals(Order obj)
{
// If parameter is null return false.
if (obj == null)
{
return false;
}
// Return true if the fields match:
return (ID == obj.ID);
}
}
public class RawOrderData
{
public int ID { get; set; }
public int Output { get; set; }
public int Wharf { get; set; }
public int PartOfID { get; set; }
public int ProductID { get; set; }
public int Quantity { get; set; }
}
系统中的每个订单都以Order
类的形式存在,当订单中有多个产品时使用该数组。RawOrderData
是从一个JSON字符串创建的,其中订单中的每个产品都有自己的对象。我想创建一个List<Order>
,其中每个订单在列表中都有自己的对象,所以当订单包含多个产品时,没有几个订单具有相同的订单id。
// raw data is here the JSON string
rawdatalist = serializer.Deserialize<List<RawOrderData>> (rawdata);
// Convert raw objects to List<Order>, list of orders
List<Order> orders = new List<Order> ();
orders = ConvertRawOrderToList (rawdatalist);
private List<Order> ConvertRawOrderToList(List<RawOrderData> datalist)
{
List<Order> orders = new List<Order> ();
foreach (RawOrderData dataobj in datalist)
{
// Check if order exists in list
if (orders.Contains(new Order () {ID = dataobj.ID}))
{
// Order exists, add more products
// CODE HERE?
} else {
// order not existing, add new order to list
short storage = GetStorageArea(dataobj.ProductID);
orders.Add (new Order () {ID = dataobj.ID, Output = dataobj.Output, Wharf = dataobj.Wharf, PartOf = dataobj.PartOfID, Product = dataobj.ProductID, Quantity = dataobj.Quantity});
}
}
return orders;
}
我认为ConvertRawOrderToList
方法正确吗?问题是我不知道在// CODE HERE?
写什么。当列表对象中有数组时,我很困惑。
我也想知道如何访问List<Order>
订单中的所有值。
Storage[]
的信息是从另一个以产品ID作为输入的方法创建的。
听起来您有一个"扁平"的对象集合,您想将其分组到Order
s中。如果是这种情况,基本的Linq投影将是最简单的:
var orders = datalist.GroupBy(o => o.ID)
.Select(g => new Order {
ID = g.Key,
Output = g.First().Output,
Wharf = g.First().Wharf,
PartOf = g.First().PartOf,
Product = g.Select(o => o.Product).ToArray(),
Quantity = g.Select(o => o.Product).ToArray(),
})
.ToList();
那么你不需要担心重写Equals
(至少不是为了这个目的)。
我在哪里添加添加存储的方法?
由于您的GetStorageArea
函数接受单个ProductID,您需要将产品id传递给该函数:
var orders = datalist.GroupBy(o => o.ID)
.Select(g => new Order {
ID = g.Key,
Output = g.First().Output,
Wharf = g.First().Wharf,
PartOf = g.First().PartOf,
Product = g.Select(o => o.Product).ToArray(),
Quantity = g.Select(o => o.Product).ToArray(),
Storage = g.Select(o => GetStorageArea(o.Product)).ToArray()
})
.ToList();