我要执行的操作是在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();
}
}
}
我想不出最好的方法,将不胜感激。
答案 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;
}
}
}
}