#c# #.net #list #arraylist
#c# #.net #Список #arraylist
Вопрос:
у меня есть информация, которую я поместил в два списка из базы данных, первый список содержит объект узла, который имеет атрибуты ID, LAT и LONG.
Второй список содержит несколько ключей и значений для каждого идентификатора в первом списке. приведенные ниже изображения лучше иллюстрируют мое объяснение. то, что я пытаюсь сделать, это добавить все эти ключи и значения в первый список для каждого идентификатора. Любая помощь о том, как это сделать, была бы очень признательна.
информация, которую я поместил в два списка. также это два списка объектов.
Изображение объектов в первом списке
Изображение вещей во втором списке
По сути, один список содержит первичные ключи из таблицы, второй список — внешние ключи. я хочу добавить второй список к первому в одной строке
, например
ИДЕНТИФИКАТОР, ШИРОТА, ДЛИНА, [КЛЮЧ, ЗНАЧЕНИЕ],[КЛЮЧ, ЗНАЧЕНИЕ]…. в зависимости от того, сколько их
Ответ №1:
Я не уверен, ищете ли вы:
- (1) SQL-запрос, который возвращает таблицу в формате
ID, LAT, LONG, [KEY, VALUE], ...
или - (2) способ связать данные в этих двух таблицах с использованием объектов C #.
Я собираюсь предположить последнее.
Вы могли бы поместить все эти пары ключ-значение в a Dictionary<string, string>
внутри Node
класса.
public class Node
{
public long ID { get; }
public int Latitude { get; }
public int Longitude { get; }
public Dictionary<string, string> KeyValuePairs { get; }
}
public class KeyValuePair
{
public long NodeID { get; }
public string Key { get; }
public string Value { get; }
}
А затем выполните итерацию по обоим спискам, добавив пары ключ-значение в словарь.
// Let's suppose we got these populated from the DB
var nodeList = new List<Node>();
var keyValuePairs = new List<KeyValuePair>();
// If we get too many rows from the DB, we'll get better performance by ordering the lists
var orderedNodesArray = nodeList.OrderBy(n => n.ID).ToArray();
var orderedKVPairsArray = keyValuePairs.GroupBy(kv => kv.NodeID).OrderBy(g => g.Key).ToArray();
var i = 0;
var j = 0;
while (i < orderedNodesArray.Length amp;amp; j < orderedKVPairsArray.Length)
{
var node = orderedNodesArray[i];
var kvPair = orderedKVPairsArray[j];
if (node.ID < kvPair.Key) i ;
else if (node.ID > kvPair.Key) j ;
else
{
foreach (var kv in kvPair)
node.KeyValuePairs.Add(kv.Key, kv.Value);
i ;
j ;
}
}