选择与另一个列表在相同索引处的列表项
本文关键字:列表 索引 另一个 选择 | 更新日期: 2023-09-27 18:10:12
又卡住了。
我一直在试图找到一种方法来编写以下代码(不幸的是,我所有的尝试都失败了…)
我有两个数组/列表,随便你怎么称呼它们。两者都有不同的项,尽管它们总是有相同数量的项。为了回答我的问题,这些列表各有3个项目。
如果我从列表1中取出第2项,那么列表2中的第2项也会被传输。
. .有效. .如果我要把列表1中的第二项移动到列表3中,我希望列表2中的第二项移到列表4中。
如果有意义…
不要有任何代码来炫耀,因为我还没有找到一种方法来编码这个。有没有善良的灵魂能在这件事上教育我?
谢谢。
编辑
我要做的实际事情是:
我有一个实时生成的哈希列表,这些哈希来自文件的位置列表,以及一个健康哈希列表。我比较两个哈希表来找到差异,然后列出差异。(所有这些我都已经编码过了)我想做的最后一件事是使用列出的哈希不匹配健康的哈希,返回它们的目录(已经在上面提到的列表中)
string path = Application.ExecutablePath; // <------- Get full file path from this EXE
string root = Path.GetDirectoryName(path); // <------- Get just the directory from above file path
IEnumerable<string> list0 = File.ReadLines(root + "/healthy.txt");
List<string> list1 = new List<string>();
IEnumerable<string> list2 = Directory.EnumerateFiles(root, "*.lol", SearchOption.AllDirectories);
List<string> list3 = new List<string>();
foreach (string forone in list0)
{
list1.Add(forone.ToString());
}
foreach (string obj in list2)
{
listBox4.Items.Add(obj.ToString());
list3.Add(GetMD5HashFromFile(obj.ToString()));
}
foreach (string obj2 in list3)
{
listBox2.Items.Add(obj2.ToString());
}
foreach (string hea in list1)
{
listBox1.Items.Add(hea.ToString());
}
IList<string> difference = list3.Except(list1).ToList();
foreach (string something in difference)
{
listBox3.Items.Add(something.ToString());
}
请注意,列表框仅用于故障排除,因此我可以看到数组中的内容。
创建一个包含两个项目的包装器类,并将其创建为单个列表。如果需要,您可以轻松地将组合列表转换为您感兴趣的对象列表:
List<Item1> item1s = combinedList.ConvertAll(pair => pair.Item1);
通用:
public class SynchronizedListsWrapper<T>
{
private readonly List<T> _first;
private readonly List<T> _second;
public SynchronizedListsWrapper(List<T> first, List<T> second)
{
_first = first;
_second = second;
}
public void Add(T item)
{
first.Add(item);
second.Add(item);
}
public void Remove(T item)
{
first.Remove(item);
second.Remove(item);
}
}
或不带泛型:
public class SynchronizedListsWrapper
{
private readonly ArrayList _first;
private readonly ArrayList _second;
public SynchronizedListsWrapper(ArrayList first, ArrayList second)
{
_first = first;
_second = second;
}
public void Add(object item)
{
first.Add(item);
second.Add(item);
}
public void Remove(object item)
{
first.Remove(item);
second.Remove(item);
}
}