C # Выберите элементы списка с тем же индексом, что и другой список - PullRequest
0 голосов
/ 30 сентября 2011

Немного застрял еще раз.

Я пытался найти способ кодировать следующее (все мои попытки, к сожалению, окончились неудачей ...)

У меня есть два массива / списка, как вы хотите их называть. Оба имеют разные предметы, хотя у них всегда будет одинаковое количество предметов. Ради моего вопроса, в этих списках по 3 элемента.

Как можно было бы кодировать его так, чтобы, если я возьму пункт 2 из списка 1, элемент 2 из списка 2 также будет перенесен.

Итак ... эффективно ... Если бы я переместил пункт 2 из списка 1 в список 3, я бы хотел, чтобы пункт 2 из списка 2 перешел в список 4.

Если это имеет смысл ...

У меня нет кода, чтобы похвастаться, потому что я еще не нашел способ закодировать это .. Любые добрые души, которые могли бы обучить меня в этом вопросе?

Спасибо.

EDIT

На самом деле я пытаюсь сделать следующее:

У меня есть список сгенерированных в реальном времени хэшей, список мест для файлов, из которых получены эти хэши, и список здоровых хэшей. Я сравниваю оба хеш-списка, чтобы найти различия, затем я перечисляю различия. (все из которых я уже закодировал) Последнее, что я хочу сделать, это использовать перечисленные хэши, которые не соответствуют здоровым, вернуть их каталог (который уже находится в списке, упомянутом выше)

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 ]

1 голос
/ 30 сентября 2011

Generic:

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);
    }
}
1 голос
/ 30 сентября 2011

Создайте класс-оболочку, который содержит оба элемента, и составьте единый список этого. Вы можете легко преобразовать ваш объединенный список в список объектов, которые вас интересуют, если вам нужно:

List<Item1> item1s = combinedList.ConvertAll(pair => pair.Item1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...