2012-11-07 57 views
-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,則更新以前的數量。

例如

順序NO:1點的數量:零

順序NO:5數量:2

順序編號:1點的數量:1

什麼它應該do是將第一個值中的數量更新爲1.

我該如何做到這一點?

+12

你的問題是極其* *不清楚。 (除了別的,爲什麼你使用兩個並行列表而不是引入一個帶有數字和數量的'Order'類型?爲什麼你使用的字符串值顯然是數字?) –

+0

爲什麼你還在使用列表 ? Order_no和數量列表是否包含「order NO:1」之類的字符串? –

+0

對不起,如此不清楚。作爲新的我試圖將每列分成不同的列表。我不能使用它的整數作爲進一步順序否可能爲前。 1A。數量相同。 Petrina你推薦一些比列表更多的選項嗎?數量列表可能具有「1」或「1x2」 – user1805445

回答

0

個人而言,我寧願一個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(); 
+0

提姆1問題。當文件超過2列時,最好使用字典作爲字典只接受2個值(例如具有40列的文件) – user1805445

+0

@ user1805445:如果知道有多少列,則應該使用這些屬性創建一個類。那麼你可以使用'List '代替。 –

+0

謝謝蒂姆!正是我在找什麼 – user1805445

0

你應該使用dictionary這個perpose

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

謝謝大家的病給字典一試 – user1805445

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