Как «чередовать» две таблицы данных - PullRequest
4 голосов
/ 10 июня 2010

Возьмите эти два списка:

Список 1

Красный Зеленый Синий

Список 2

Коричневый Красный Синий Фиолетовый Оранжевый

Я ищу способ объединить эти списки, чтобы получить:

Список 3

Коричневый Красный Зеленый Синий Фиолетовый Оранжевый

Я думаю, что основные правила таковы:

1) Вставить сверху списка любую строку, находящуюся перед первой общей строкой (например, Браун предшествует первой общей строке, красный);

2) Вставить элементы между строками, если оба списка имеютдва элемента (например, список 1 вставляет зеленый между красным и синим);и

3) Вставить строки внизу, если в 2 нет «промежуточности» (например, в Списке 2 вставлен оранжевый внизу).

Списки хранятся вТаблица данных.Я предполагаю, что мне придется переключаться между ними во время итерации, но мне сложно разобраться в методе объединения строк.

Спасибо за любую помощь.

--Brent

Ответы [ 2 ]

1 голос
/ 10 июня 2010

Я думаю, что-то вроде этих строк должно сделать это для вас:

Dictionary<string, float> clrs = new Dictionary<string, float>();

float i = 0;
foreach (string s in largeList)
    clrs.Add(s, i++);

float lastIndex = 0;
for (int j = 0; j < smallList.Count; j++)
{
    if (largeList.Contains(smallList[j]))
        lastIndex = clrs[smallList[j]];
    else
        clrs.Add(smallList[j], lastIndex + 0.5f);
}

var sorted = from c in clrs.Keys orderby clrs[c] select c;

return sorted.ToList<string>();

это не предполагает дубликатов ни в одном списке, и что функция передается большему списку как большому списку.

0 голосов
/ 10 июня 2010

Если вы хотите объединить два стандартных списка и не заботиться о сортировке, вы можете использовать что-то вроде этого:

var list1 = new[] { "Red", "Green", "Blue" };
var list2 = new[] { "Brown", "Red", "Blue", "Purple", "Orange" };

var result = new List<string>( list2 );
result.AddRange( list1.Except( list2 ) );

Попытка сохранить какой-то особый порядок будет затруднена.Например, предположим, что list2 не содержит Red, каким должен быть первый элемент: Brown или Red?Предположим, что в списке list1 есть желтый, а в списке list2 - желтый.Каким должен быть порядок?

Если вы пытаетесь объединить два объекта DataTable, для объекта DataTable существует метод слияния, позволяющий объединить один объект DataTable в другой.

DataTable.Merge

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...