ajithk444 Ответов: 5

Возвращает уникальные значения из списка в C#


Всем привет,
У меня есть приложение, в котором я получаю идентификаторы из gridview и сохраняю их в целочисленном списке List<int>.

List<int> list = new List<int>();

//Example say, if the values in my list is 

 list={100,100,101,124,155,114,101};

//I want my list to return only unique values as i am passing my list to a database for retrieving data.

//I want my list to return like this.

list={100,101,124,155,114};

Как я могу это сделать?Пожалуйста, помогите мне....

5 Ответов

Рейтинг:
44

Santhosh Kumar Jayaraman

Проверить это

List<int> list = new List<int>();
            list.Add(100);
            list.Add(100);
            list.Add(101);
            list = list.Distinct().ToList();


Теперь это будет иметь 100 и 101


ajithk444

спасибо:)это помогло:)

Рейтинг:
28

Andy411

Почему бы не использовать LINQ ?

List<int> l = new List<int>() { 100, 100, 101, 102, 103, 102 };

var v = l.Distinct();

foreach (var item in v)
{
    Debug.WriteLine(item.ToString());
}

// or

List<int> li = l.Distinct().ToList();


Дать вам:

100
101
102
103


TheCoolCoder

Был Абт, чтобы опубликовать это и подумал об освежении :-)..

Andy411

:-)

ajithk444

спасибо:)это помогло:)

Рейтинг:
21

MT_

Либо вы можете написать свой собственный алгоритм, либо, если вы используете .Net 3.5 и выше, используйте HasSet.

Как только у вас есть свои значения в списке, используйте следующий код

HashSet<int> uniqueNumbers = new HashSet<int>(list);</int></int>


Это даст хэш-набор с уникальным номером, в вашем случае список только из 5 значений.


ajithk444

спасибо:)это помогло:)

MT_

Рад, что это помогло

Рейтинг:
15

Nelek

Возможность для вашей собственной функции (как сказано в решении 1)

Вы можете начать копировать первый элемент во второй список, а затем удалить его с помощью RemoveAt, затем используйте Findкомандуйте с помощью этого элемента. Если он найден... удалите его и попробуйте найти в другой раз, если не найден, начните с самого начала со следующего элемента, который будет скопирован во второй список.

Вы можете использовать FindAll и RemoveAll также

Взглянуть
http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx[^]


ajithk444

спасибо:)это помогло:)

Nelek

Добро пожаловать. :)

Рейтинг:
11

ajithk444

Вот как я это сделал в большой сложной манере, хотя.В любом случае спасибо за все ваши отзывы.Это очень помогло.

public List<int> GetEmpID() //Get unique ID's in a list 
    {
        List<int> list = new List<int>();
        List<int> Newlist = new List<int>();
        foreach (GridViewRow gvr in this.gridBWAProject.Rows)
        {
            if (((System.Web.UI.WebControls.CheckBox)gvr.FindControl("chkSelect")).Checked == true)
            {
                list.Add(Convert.ToInt32(gvr.Cells[1].Text.ToString()));
            }
        }
        
        IEnumerable<int> distinctlist = list.Distinct();
        foreach (int id in distinctlist)
       {
        Newlist.Add(id);
       }
        return Newlist;


MT_

Вы можете заменить IEnumerable<int> distinctlist = list.Distinct(); by newList = IEnumerable<int> distinctlist = list.Отчетливый().Список();

MT_

Это сэкономит вам цикл foreach.