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

时间:2011-09-30 15:20:50

标签: c# collections

再次陷入困境。

我一直试图找到一种方法来编写以下内容(不幸的是,我的所有尝试都失败了......)

我有两个数组/列表你想要调用它们。 两者都有不同的项目,尽管它们总是具有相同数量的项目。 为了我的问题,这些列表各有3个项目。

如何对其进行编码,以便如果我从列表1中获取第2项,那么列表2中的第2项也将被传输。

所以..有效..如果我要将项目2从列表1移动到列表3,我希望列表2中的项目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());
            }

请注意,列表框仅用于故障排除,因此我可以看到阵列中的内容。

2 个答案:

答案 0 :(得分:1)

创建一个包装器类,它包含两个项目并生成一个列表。如果需要,您可以轻松地将组合列表转换为您感兴趣的对象列表:

List<Item1> item1s = combinedList.ConvertAll(pair => pair.Item1);

答案 1 :(得分:1)

通用:

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);
    }
}