删除相似的列表框项目
remove similar listbox items
我有一个包含类似项目的列表框,例如:file1.exe=11,file1.exe=9 file2.exe=1,file3.zip=7,file7.zip=00, file3.zip=101 ...等等。现在我要做的是删除类似的项目,所以我最终得到:file1.exe=11、file3.zip=7、file3.zip=101 .. 等等。最后的数字是随机的,重要的是我不会多次获得相同的文件名。这是我蹩脚的尝试(矫枉过正,不起作用)。
public void RemoveListboxDuplicates(ListBox ListBox)
{
List<String> filenames = new List<String>();
List<String> unique = new List<String>();
foreach (string itm in ListBox.Items)
{
string fname = itm.Substring(0, itm.LastIndexOf("="));
filenames.Add(fname);
}
for (int i=0;i<filenames.Count;i++)
{
if(!lstFiles.Items[i].ToString().Contains(filenames[i])) {
unique.Add(lstFiles.Items[i].ToString());
}
}
lstFiles.Items.Clear();
foreach (string itm in unique)
{
lstFiles.Items.Add(itm);
}
}
如果 =
之后的数字无关紧要,一种方法是:
List<String> all = new List<String>();
foreach (string itm in ListBox.Items) {
all.Add(itm);
}
var unique = all
.GroupBy(s => s.Split('=')[0])
.Select(g => g.First())
.ToList();
s.Split('=')[0]
操作砍掉=
之后的部分,使用前缀作为分组键。 Select(g => g.First())
部分抓取每组的第一个元素,ToList()
将结果再次变成List<string>
。
我有一个包含类似项目的列表框,例如:file1.exe=11,file1.exe=9 file2.exe=1,file3.zip=7,file7.zip=00, file3.zip=101 ...等等。现在我要做的是删除类似的项目,所以我最终得到:file1.exe=11、file3.zip=7、file3.zip=101 .. 等等。最后的数字是随机的,重要的是我不会多次获得相同的文件名。这是我蹩脚的尝试(矫枉过正,不起作用)。
public void RemoveListboxDuplicates(ListBox ListBox)
{
List<String> filenames = new List<String>();
List<String> unique = new List<String>();
foreach (string itm in ListBox.Items)
{
string fname = itm.Substring(0, itm.LastIndexOf("="));
filenames.Add(fname);
}
for (int i=0;i<filenames.Count;i++)
{
if(!lstFiles.Items[i].ToString().Contains(filenames[i])) {
unique.Add(lstFiles.Items[i].ToString());
}
}
lstFiles.Items.Clear();
foreach (string itm in unique)
{
lstFiles.Items.Add(itm);
}
}
如果 =
之后的数字无关紧要,一种方法是:
List<String> all = new List<String>();
foreach (string itm in ListBox.Items) {
all.Add(itm);
}
var unique = all
.GroupBy(s => s.Split('=')[0])
.Select(g => g.First())
.ToList();
s.Split('=')[0]
操作砍掉=
之后的部分,使用前缀作为分组键。 Select(g => g.First())
部分抓取每组的第一个元素,ToList()
将结果再次变成List<string>
。