从列表视图中删除重复项,具体取决于第一列的值

时间:2018-10-06 12:13:39

标签: c#

我要执行的操作是在listView中删除重复的行,但仅当第一列重复时才这样做:

名称/年龄/职位

John / 24 /工程师

汤姆/ 32 /高尔夫球手

John / 55 /科学家

John的名字曾两次出现在这里,我只希望拥有一次,然后删除所有其他行,这是我到目前为止拥有的基本代码:

public void RemoveDuplicates() {
    for (int i = 0; i < listViewTwitter.Items.Count - 1; i++)
    {
        if (listViewTwitter.Items[i].Tag == listViewTwitter.Items[i + 1].Tag)
        {
            listViewTwitter.Items[i + 1].Remove();
        }
    }
}

我想不出最好的方法,将不胜感激。

1 个答案:

答案 0 :(得分:1)

下面的代码是我为您编写的示例。

为了使我的爱情更好,首先我创建了一个类:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Job { get; set; }
}

然后我声明了Person类的对象列表。

private void frmMain_Load(object sender, EventArgs e)
{
    var list = new List<Person>()
    {
        new Person() { Age = 24 , Job = "Engineer", Name = "John" },
        new Person() { Age = 32, Job = "Golfer", Name = "Tom " },
        new Person() { Age = 55, Job = "Scientist",Name = "John" },
    };


    foreach (var person in list)
    {
        ListViewItem item = new ListViewItem(person.Name);
        item.Tag = person;

        listView1.Items.Add(item);
    }
}

然后,我通过按下带有两个for-loop

的按钮来删除所有重复项
private void btnRemoveDupplicates_Click(object sender, EventArgs e)
{
    for (int i=0;i<listView1.Items.Count;i++)
    {

        var person = (Person)listView1.Items[i].Tag;
        for (int j = 0; j < listView1.Items.Count; j++)
        {
            if(
                ((Person)listView1.Items[j].Tag).Name == person.Name && 
                listView1.Items[i].Index != listView1.Items[j].Index)
            {                        
                listView1.Items[j].Remove();
                continue;
            }
        }
    }
}