C # Проблема с дублирующимися записями в списке - PullRequest
2 голосов
/ 16 сентября 2011

Эй, ребята, у меня есть программа, и я загружаю все строки внутри текстового поля и отделяю их от символа :

Работает нормально и все, но дублирует его.Вывод, который я получаю:

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 ]

4 голосов
/ 16 сентября 2011

Я думаю, вам нужно потерять внутреннее для каждого.продолжайте вызов addToList, хотя

// 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() );
}
2 голосов
/ 16 сентября 2011

Это твой второй за каждый цикл.Это не нужно:

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

}

Если вы посмотрите на свой код, вы не используете part, но зацикливаете результаты на Split(':'), который дает вам строковый массив длины 2.

0 голосов
/ 16 сентября 2011

Убедитесь, что в файле, в котором вы читаете, нет повторяющихся строк или записей в строках?

Если вы вставите в HashSet<string> или запустите запрос LINQ Distinct () в своем существующем списке, вы избежите дублирования в конечном результате.

...