【发布时间】:2021-09-12 05:41:44
【问题描述】:
我想将一个包含 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;
}
这是我正在努力解决的最后一个功能,这部分是我的问题。
谢谢! 保罗
【问题讨论】:
-
我不确定我理解你的意思,展示你想要的例子可能很有用
-
同意,想要的东西真的很难得到。
-
是的,我知道,让我告诉你整个故事。我正在尝试将 prestashop 的 php 代码的一部分翻译成 c#。该函数根据类别设置左右编号。我将编辑我的问题并添加代码...
-
你可以试试 LINQ 的 GroupBy 吗?
标签: c# class dictionary multidimensional-array indexing