选择与另一个列表在相同索引处的列表项

本文关键字:列表 索引 另一个 选择 | 更新日期: 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);
    }
}