ADI@345 Ответов: 2

Как удалить дубликат элемента из stringbuilder


я не могу удалить дубликат элемента из stringbuilder

Что я уже пробовал:

StringBuilder sb1 = new StringBuilder();
       string sep = "";

       //List<string> term = new List<string>();
       foreach (RepeaterItem item in Repeater1.Items)
       {
           CheckBoxList CheckBoxList1 = (CheckBoxList)item.FindControl("CheckBoxList1");
           foreach (ListItem item1 in CheckBoxList1.Items)
           {
               if (item1.Selected == true)
               {
                 Label lblname = (Label)item.FindControl("Label1");
                 sb1.AppendFormat("{0}{1}", sep, lblname.Text);

               }

           }
           List<string> itemList = sb1.ToString().ToUpper().Split(',').ToList<string>();
           Label5.Text = itemList.ToString();
       }

Jochen Arndt

Выполните проверку перед добавлением.

Однако почему вы используете StringBuilder здесь?
Почему бы не использовать список "строка" и не добавить элементы, которые еще не существуют в списке?

F-ES Sitecore

Что вы подразумеваете под "дублирующим элементом"? Stringbuilder-это просто текст. Если вы имеете в виду, что у вас есть элементы чекбокса с одной и той же меткой, и вы не хотите дублировать метки, то решение для добавления состоит в том, чтобы в первую очередь не добавлять дубликаты в конструктор строк. Вместо этого вы можете добавить текст в список "строка"и сделать a .Distinct() в этом списке, чтобы удалить дубликаты, а затем добавить их в конструктор строк.

ADI@345

Список<строка> в срок = новый список<строка&ГТ;();

foreach (RepeaterItem item in Repeater1.Предметы)
{
CheckBoxList CheckBoxList1 = (CheckBoxList)элемент.FindControl("CheckBoxList1");
по каждому элементу (элемент listitem элемент1 в CheckBoxList1.Предметы)
{
if (item1.Selected == true)
{
Label lblname = (метка)элемент.FindControl("Label1");
term.Add(lblname.Текст);

}

}


}

Label5.Текстовая строка.Join(" ", term.Метод toArray());
}


это работает , но как я получаю только отдельный элемент.я имею в виду удалить дубликат элемента..

Maciej Los

Пожалуйста, дайте определение "дублирующему элементу"...

2 Ответов

Рейтинг:
6

Maciej Los

ADI@345 написал в комментарии к этому вопросу:

List<string> term = new List<string>();

foreach (RepeaterItem item in Repeater1.Items)
{
    CheckBoxList CheckBoxList1 = (CheckBoxList)item.FindControl("CheckBoxList1");
    foreach (ListItem item1 in CheckBoxList1.Items)
    {
        if (item1.Selected == true)
        {
            Label lblname = (Label)item.FindControl("Label1");
            term.Add(lblname.Text);
        }
    }
}

Label5.Text = string.Join(" ", term.ToArray());
}


это работает , но как я получаю только отдельный элемент.я имею в виду удалить дубликат элемента..


Не уверен, что хорошо вас понимаю, но ... .. Вы можете использовать Перечислимый.Метод Distinct(TSource) (IEnumerable(TSource)) (System.Linq)[^].

Например:
List<string> term = new List<string>(){"a", "a", "b", "c", "c", "c", "d"};
var result = string.Join(",", term.Distinct());
//produces: a,b,c,d


В вашем случае:
Label5.Text = string.Join(" ", term.Distinct());

должен делать свою работу!


Рейтинг:
19

Jochen Arndt

Ваш код не имеет для меня особого смысла:

  • Ты звонишь item.FindControl("Label1") во внутренней петле. Таким образом, вы получите одно и то же значение несколько раз, когда будет установлено несколько флажков.
  • Вы устанавливаете Label5 в пределах внешней петли несколько раз.

В результате у вас будет пустой список / строка или один, содержащий один и тот же текст несколько раз. Если это так, то код может быть упрощен до:
foreach (RepeaterItem item in Repeater1.Items)
{
    CheckBoxList CheckBoxList1 = (CheckBoxList)item.FindControl("CheckBoxList1");
    foreach (ListItem item1 in CheckBoxList1.Items)
    {
        if (item1.Selected == true)
        {
            Label lblname = (Label)item.FindControl("Label1");
            Label5.Text = lblname.Text;
            break;
        }
    }
}
Если это не так, вам следует подумать о том, что Вы, наконец, хотите сделать, и написать соответствующий код. Я бы по крайней мере ожидал этого Label5 должен быть установлен вне любой петли.