从下拉列表中删除重复项
Removing Duplicates from a dropdown list
我之前在另一个 post 上得到了一些帮助,可以删除下拉列表中的文件扩展名。我现在需要删除重复项。这是当前前后:
之前:
video-1.mp4
video-1.ogv
video-1.webm
之后:(当前代码)
video-1
video-1
video-1
我想要的:
video-1
下面是我的代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindGrid();
}
if (!IsPostBack)
{
string[] filePaths = Directory.GetFiles(Server.MapPath("~/Uploads/"));
List<ListItem> files = new List<ListItem>();
foreach (string filePath in filePaths)
{
var item = new ListItem(Path.GetFileNameWithoutExtension(filePath), filePath);
if (!files.Contains(item))
files.Add(item);
}
DropDownList1.DataSource = files;
DropDownList1.DataTextField = "";
DropDownList1.DataValueField = "";
DropDownList1.DataBind();
}
}
LINQ 的扩展方法.Distinct()
会有所帮助。您可能需要手动添加 using System.Linq;
不要忘记它将 return 没有重复元素的新集合,而不是修改当前元素。
我假设您想保留 filePath
(至少对于某些文件)并将其存储为 ListItem
的值,如您的代码所示。
您可以像这样使用 Dictionary:
Dictionary<string,string> filenames = new Dictionary<string, string>();
foreach (string filePath in filePaths)
{
var file_name_without_extension = Path.GetFileNameWithoutExtension(filePath);
if(filenames.ContainsKey(file_name_without_extension))
continue;
filenames.Add(file_name_without_extension, filePath);
}
List<ListItem> files = filenames.Select(x => new ListItem(x.Key, x.Value)).ToList();
我之前在另一个 post 上得到了一些帮助,可以删除下拉列表中的文件扩展名。我现在需要删除重复项。这是当前前后:
之前:
video-1.mp4
video-1.ogv
video-1.webm
之后:(当前代码)
video-1
video-1
video-1
我想要的:
video-1
下面是我的代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindGrid();
}
if (!IsPostBack)
{
string[] filePaths = Directory.GetFiles(Server.MapPath("~/Uploads/"));
List<ListItem> files = new List<ListItem>();
foreach (string filePath in filePaths)
{
var item = new ListItem(Path.GetFileNameWithoutExtension(filePath), filePath);
if (!files.Contains(item))
files.Add(item);
}
DropDownList1.DataSource = files;
DropDownList1.DataTextField = "";
DropDownList1.DataValueField = "";
DropDownList1.DataBind();
}
}
LINQ 的扩展方法.Distinct()
会有所帮助。您可能需要手动添加 using System.Linq;
不要忘记它将 return 没有重复元素的新集合,而不是修改当前元素。
我假设您想保留 filePath
(至少对于某些文件)并将其存储为 ListItem
的值,如您的代码所示。
您可以像这样使用 Dictionary:
Dictionary<string,string> filenames = new Dictionary<string, string>();
foreach (string filePath in filePaths)
{
var file_name_without_extension = Path.GetFileNameWithoutExtension(filePath);
if(filenames.ContainsKey(file_name_without_extension))
continue;
filenames.Add(file_name_without_extension, filePath);
}
List<ListItem> files = filenames.Select(x => new ListItem(x.Key, x.Value)).ToList();