C#重复列表条目的问题

时间:2011-09-16 03:41:30

标签: c# arrays split duplicates

嘿伙计们我有一个程序,我在文本框中加载所有行并将它们从char :

中分离出来

它工作正常,除了它重复之外。我得到的输出是:

ID: 1NAME: Stone
ID: 1NAME: Stone
ID: 2NAME: Grass
ID: 2NAME: Grass
ID: 3NAME: Dirt
ID: 3NAME: Dirt

当输出应为:

ID: 1NAME: Stone
ID: 2NAME: Grass
ID: 3NAME: Dirt

我的代码是:

    foreach (String line in File.ReadAllLines("item.ids"))
    {
        items = line.Split(':');


        foreach (String part in items)
        {
            addToList(specs, "ID: "+line.Split(':').First() + "NAME: "+line.Split(':').Last() );
        }
    }

我做错了什么?

3 个答案:

答案 0 :(得分:4)

我认为你需要为每个人松开内心。 通过

保持呼叫添加到列表
// for every line in the file....
foreach (String line in File.ReadAllLines("item.ids"))
{
   //get the parts by splitting the line on the colon
   items = line.Split(':');

   //for every item in the parts (there are two parts, according to your code)
   // so this will loop twice--adding your item twice
   foreach (String part in items)
   {

     // you are splitting again, and this is not necessary
     // you could just call items.First() or items[0]
     // and items.Last() or items[1]
     addToList(specs, "ID: "+ line.Split(':').First() + 
                      "NAME: "+line.Split(':').Last() );
   }
 }

我会做这样的事情来解决它:

foreach (string line in File.ReadAllLines("item.ids"))
{
   items = line.Split(':');
   addToList(specs, "ID: "  + items.First() + 
                    "NAME: "+ items.Last() );
}

答案 1 :(得分:2)

这是你每个循环的第二个。这不需要:

foreach (String line in File.ReadAllLines("item.ids"))
{
    items = line.Split(':');
    addToList(specs, "ID: "+line.Split(':').First() + "NAME: "+line.Split(':').Last() );

}

如果您查看代码,则不使用part,而是循环Split(':')的结果,该结果为您提供长度为2的字符串数组。

答案 2 :(得分:0)

您是否确保在您正在阅读的文件中的行上没有重复的行或条目?

如果您插入HashSet<string>,或在现有列表上运行LINQ Distinct()查询,那么您将避免在最终结果中出现重复。