c# - C#字典添加值数组
问题描述
我想将具有 3 个值的数组添加到字典的值中。例如:
var dict = new Dictionary<int, ComputeNTree>();
dict.Add(1, new ComputeNTree(12, 1, 0));
dict.Add(1, new ComputeNTree(14, 2, 0));
dict.Add(2, new ComputeNTree(16, 4, 0));
public class ComputeNTree
{
public ComputeNTreeIndexes[] ComputeNTreeIndexes
}
public class ComputeNTreeIndexes
{
public int IdCategory { get; set; }
public int Nleft { get; set; }
public int Nright { get; set; }
}
我可以在现有键处声明索引的数量,但如果可以将值添加到某个键并且它是关联的数组,那没问题。
编辑:我想将一些代码从 prestashop 翻译成 c#:
public static function regenerateEntireNtree()
{
$id = Context::getContext()->shop->id;
$idShop = $id ? $id : Configuration::get('PS_SHOP_DEFAULT');
$sql = new DbQuery();
$sql->select('c.`id_category`, c.`id_parent`');
$sql->from('category', 'c');
$sql->leftJoin('category_shop', 'cs', 'c.`id_category` = cs.`id_category` AND cs.`id_shop` = ' . (int) $idShop);
$sql->orderBy('c.`id_parent`, cs.`position` ASC');
$categories = Db::getInstance()->executeS($sql);
$categoriesArray = array();
foreach ($categories as $category) {
$categoriesArray[$category['id_parent']]['subcategories'][] = $category['id_category'];
}
$n = 1;
if (isset($categoriesArray[0]) && $categoriesArray[0]['subcategories']) {
$queries = Category::computeNTreeInfos($categoriesArray, $categoriesArray[0]['subcategories'][0], $n);
// update by batch of 5000 categories
$chunks = array_chunk($queries, 5000);
foreach ($chunks as $chunk) {
$sqlChunk = array_map(function ($value) { return '(' . rtrim(implode(',', $value)) . ')'; }, $chunk);
Db::getInstance()->execute('INSERT INTO `' . _DB_PREFIX_ . 'category` (id_category, nleft, nright)
VALUES ' . rtrim(implode(',', $sqlChunk), ',') . '
ON DUPLICATE KEY UPDATE nleft=VALUES(nleft), nright=VALUES(nright)');
}
}
}
protected static function computeNTreeInfos(&$categories, $idCategory, &$n)
{
$queries = array();
$left = $n++;
if (isset($categories[(int) $idCategory]['subcategories'])) {
foreach ($categories[(int) $idCategory]['subcategories'] as $idSubcategory) {
$queries = array_merge($queries, Category::computeNTreeInfos($categories, (int) $idSubcategory, $n));
}
}
$right = (int) $n++;
$queries[] = array($idCategory, $left, $right);
return $queries;
}
这是我正在努力解决的最后一个功能,那部分是我的问题。
谢谢!保罗
解决方案
我假设您的目标是拥有一个<int, List<ComputeNTree>>
成对的字典,正如我能够通过您的代码理解的那样:
dict.Add(1, new ComputeNTree(12, 1, 0));
dict.Add(1, new ComputeNTree(14, 2, 0));
dict.Add(2, new ComputeNTree(16, 4, 0));
从这个意义上说,您应该使用 Key 作为列表的访问器。int
使用您需要的键初始化字典。您还必须创建代码来检查密钥是否存在。如果需要该功能,请添加新密钥并删除密钥。
为了将新元素添加到某个字典对中的列表中。从该对中检索列表。就像
var list = dict[key];
从那里您可以像往常一样使用 C# 列表进行操作。
list.add(new ComputeNTree(16,4,0);
因此,dict.Add()
您需要实现这些方法,而不是您。检查密钥是否存在并具有初始化列表并从那里开始。
推荐阅读
- java - 将多个单词写入一个 CSV 单元格
- selenium - DevTools 监听 ws://127.0.0.1:9222/devtools/browser/d6cd5add-200d-4bf7-b1ec-12f743092efc 和随后的超时
- qt - 如何在 QTreeView 中显示所有子项?
- java - 获取两个位置 android google maps 之间的距离并画线
- html - 生成的表格比编码的小
- .net - 在 .Net 中使用带有 X509 的证书吊销列表文件
- python - 用于 pygame 的 Ubuntu systemd 服务
- android - 为android创建自定义显示活动
- python-3.x - 代码第二次运行失败,但在删除 _pycache_ 文件夹后运行?
- batch-file - 使用批处理文件获取 httpresponse 的值