有一个csv文件与两列,如果第一列包含重复,比较彼此的第二列值

问题描述:

我有一个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

正如注释中所述,您可以使用字典,并将值存储(如果值较高)。

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 –

另一解决办法是在升序模式中的第一列和第二柱中的下行第一排序CSV文件模式。这会按照您想要的顺序放置数据,并且在比较行时只取第一个数据行,因为这是具有最高数值的数据行,并将其存储在新的CSV文件中。