2017-04-11 64 views
-1

我有一個csv文件有兩列;綽號和等級。 我試圖達到的是;如果第一列包含重複項,則 然後比較第二列值;在一個新的CSV文件存儲暱稱和排名較高值的有一個csv文件與兩列,如果第一列包含重複,比較彼此的第二列值

即想象這是csv文件: ABC,8 QWERTY,2 lplo,5 ABC,15

邏輯:ABC的被複制,所以比較它們的值,因爲15高於8,將abc存儲在新的csv文件中。

有什麼建議嗎?無法弄清楚如何比較第二個值

+2

到目前爲止你有嘗試過什麼嗎? –

+0

你可以使用一個字典,並恢復它的值如果它更高 –

+0

@DangerZone我可以使用foreach即nickname.IndexOf(nick)!=暱稱.LastIndexOf(尼克)得到重複,但然後無法弄清楚如何比較第二個值,如何跟蹤它。附:我剛剛開始學習c#2個月前 – Teallaair9

回答

1

正如註釋中所述,您可以使用字典,並將值存儲(如果值較高)。

var lines = new List<string>(); 
    lines.Add("abc, 8"); 
    lines.Add("qwerty, 2"); 
    lines.Add("lplo, 5"); 
    lines.Add("abc, 15"); 

    var nameAndRanks = new Dictionary<string, int>(); 
    foreach(var line in lines) 
    { 
     var values = line.Split(','); 
     var name = values[0]; 
     var rank = int.Parse(values[1]); 

     if (nameAndRanks.ContainsKey(name)) 
     { 
      if (nameAndRanks[name] < rank) 
      { 
       nameAndRanks[name] = rank; 
      } 
     } else 
     { 
      nameAndRanks.Add(name, rank); 
     } 
    } 

    foreach (KeyValuePair<string, int> entry in nameAndRanks) 
    { 
     Console.WriteLine(entry.Key + " : " + entry.Value ); 
    } 

的這個輸出將是

abc : 15 
qwerty : 2 
lplo : 5 
+0

非常感謝這位伴侶 – Teallaair9

+0

對不起,是通過代碼,並無法理解這一行: if(nameAndRanks [name] Teallaair9

+0

我沒有比較int與字符串。我將字符串轉換爲int「int.Parse(values [1]);」看看https://msdn.microsoft.com/en-us/library/b3h1hf19(v=vs.110).aspx –

0

另一解決辦法是在升序模式中的第一列和第二柱中的下行第一排序CSV文件模式。這會按照您想要的順序放置數據,並且在比較行時只取第一個數據行,因爲這是具有最高數值的數據行,並將其存儲在新的CSV文件中。

相關問題