-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]);    
}       

今、私がしようとしているのは、同じ注文がリストの下にあり、数量がnullである間、ループ内にあり、前の数量を更新します。

例えば

注文番号: 1 数量: null

注文番号: 5 数量: 2

注文番号: 1 数量: 1

最初の値の数量を 1 に更新する必要があります。

どうすればそれを達成できますか?

4

3 に答える 3

0

個人Dictionary<String, String>的には、これらのペアは論理的に一緒に属しているため(注文ごとに1つの数量)、代わりに使用することをお勧めします。しかし、わかりました...

order_noでグループ化し、null以外の値(存在する場合)を1つだけ選択できます。

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;
    }
}

最初のnull以外の数量ではなく、最大の数量が必要な場合は、次の行を変更します。

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 に答える
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 に答える