将项目与项目列表进行比较,不包括正在比较的项目
本文关键字:项目 比较 不包括 列表 | 更新日期: 2023-09-27 18:28:43
我有一个项目列表,比如|1|2|3|4|5|我想取1并将其与列表的其余部分进行比较,但我不希望1与它自己进行比较。在1与列表的其他部分进行比较后,我想把1放回列表中,然后把2拿出来与列表的其余部分进行比较,这次包括1。这就是我尝试过的。这里的问题是,当我第一次迭代时,它非常完美,因为第一次迭代从0开始,从1开始进行比较,但一旦它循环通过0索引,它就会开始与它进行比较,这会导致问题。任何帮助都会很棒。我知道这只是一个逻辑问题,我必须弄清楚,但我有点迷路了。
以下是我尝试过的
if (RadUpload1.UploadedFiles.Count > 1)
{
for (int fileBuffer = 0; fileBuffer < RadUpload1.UploadedFiles.Count; fileBuffer++)
{
for (int fileList = 1; fileList < RadUpload1.UploadedFiles.Count; fileList++)
{
if (RadUpload1.UploadedFiles[fileBuffer] != RadUpload1.UploadedFiles[fileList])
{
if (RadUpload1.UploadedFiles[fileBuffer].GetName() == RadUpload1.UploadedFiles[fileList].GetName())
{
lbl_message.Text = "There where duplicates files found please check the files and try again";
}
else
{
//do other stuffs
}
if (RadUpload1.UploadedFiles.Count > 1)
{
for (int fileBuffer = 0; fileBuffer < RadUpload1.UploadedFiles.Count-1; fileBuffer++)
{
for (int fileList = fileBuffer + 1; fileList < RadUpload1.UploadedFiles.Count; fileList++)
{
if (RadUpload1.UploadedFiles[fileBuffer] != RadUpload1.UploadedFiles[fileList])
{
//....
我知道这不是在使用你的代码,而是将每个项目与每个项目进行比较的简单概念,但它本身就在那里,祝你好运。
def search(alist):
for anitem in alist:
for anotheritem in alist:
if alist.index(anitem) == alist.index(anotheritem):
pass
else:
Do something
那么您想查找重复项吗?LINQ将极大地简化它:
var list = new List<int> { 1, 2, 3, 4, 5 };
var dups = list.GroupBy(i => i).Where(g => g.Count() > 1);
foreach (var dup in dups)
{
int i = dup.Key;
int count = dup.Count();
}
这也适用于您的UploadedFileCollection
(在Cast
的帮助下,因为它只实现非通用的CollectionBase
类):
var dupFiles = uploadedFiles.Cast<UploadedFile>()
.GroupBy(f => f.GetName())
.Where(g => g.Count() > 1);
foreach (var dupFile in dupFiles)
{
string fileName = dupFile.Key;
int count = dupFile.Count();
}
相反,要从列表中删除和添加项目,可以使用Object.ReferenceEquals来知道它是否是同一个File实例:
试试这个代码:
class Program
{
static void Main(string[] args)
{
List<File> FileList = new List<File>();
FileList.Add(new File { FullPath = "File1" });
FileList.Add(new File { FullPath = "File2" });
FileList.Add(new File { FullPath = "File3" });
FileList.Add(new File { FullPath = "File4" });
FileList.Add(new File { FullPath = "File5" });
//FileList.Add(new FileName { FullPath = "File5" });
foreach (File SourceFile in FileList)
{
foreach (File TestFile in FileList)
{
if (SourceFile.GetName() == TestFile.GetName() && !(Object.ReferenceEquals(SourceFile, TestFile)))
{
var lbl_message = "There where duplicates files found please check the files and try again";
}
else
{
//another stuff
}
}
}
}
}
public class File
{
public string FullPath;
public string GetName()
{
return FullPath;
}
}
您也可以使用linq查询:
var duplicatesFiles = from file in FileList
group file by file.GetName() into groupedbyname
where groupedbyname.Count() > 1
select groupedbyname.Count();
bool thereAreDuplicates = duplicatesFiles.Count() > 0;