-2

我已将一个 txt 逗号分隔到多个列表中。例如

static public void File()    
{    
    var order_no = new List<String>();    
    var quantity = new List<String>();    
    order_no.Add(fields[0]);    
    quantity.Add(fields[1]);    
}       

现在我想要的是在一个循环中,同时在列表中找到相同的订单并且数量为空,然后更新前一个中的数量。

例如

订单编号:1 数量:空

订单编号:5 数量:2

订单号:1 数量:1

它应该做的是将第一个值中的数量更新为1。

我怎样才能做到这一点?

4

3 回答 3

0

你应该为此使用字典

Dictionary<string, string> orders = new Dictionary<string, string>();
if (orders.ContainsKey(field[0]))
{
    if (String.IsNullOrEmpty(orders[field[0]]))
    {
        orders[field[0]] = field[1];
    }
}
else
{
    orders.Add(field[0], field[1]);
}
于 2012-11-07T08:35:37.880 回答
0

我个人更喜欢 a Dictionary<String, String>,因为这些对在逻辑上属于一起(每个订单一个数量)。但是没问题...

您可以按 order_no 分组并仅选择一个非空值(如果有):

var orderGroups = order_no
    .Select((order, index) => new { 
         order, index,
         quantity = quantity.ElementAtOrDefault(index)
     })
    .GroupBy(x => x.order)
    .Where(g => g.Count() > 1);
foreach(var og in orderGroups)
{
    var firstNotNull = og.FirstOrDefault(x => x.quantity != null);
    if (firstNotNull != null)
    {
        var allIndices = og.Select(x => x.index);
        foreach (int index in allIndices)
            quantity[index] = firstNotNull.quantity;
    }
}

如果您不想要第一个非空数量而是最高数量,请更改以下行:

var firstNotNull = og.Where(x => x.quantity != null)
                     .OrderByDescending(x => int.Parse(x.quantity))
                     .FirstOrDefault();
于 2012-11-07T08:36:19.360 回答
0

如果您的订单号是唯一的,您可以使用字典:

var orders = new Dictionary<string, string>();

// This I assume is your file reading magic
foreach (line in lines)
{
    fields = line.Split(' ');

    if (!orders.ContainsKey(fields[0])
    {
        orders.Add(fields[0], fields[1]);
    }
    else
    {
        orders[fields[0]] = fields[1];
    }
}
于 2012-11-07T08:36:37.360 回答