C# 设置字典中布尔数组的大小
我试图做一些概念上简单的事情,但由于某种原因我无法理解 我正在制作一个树结构(本例中为八叉树): 类八叉树 { 公共只读八叉树父树; 公共字典儿童; 公共只读bool[,]索引; } 布尔数组只能是[1,1,1],子字典只能包含8个键值对 我可以很好地得到这8个孩子,但我一辈子都搞不懂如何强制布尔数组只能是[1,1,1] 我环顾四周,找不到答案,这可能很简单,没人问过,但我在兜圈子 我尝试过创建一个“结构索引{boolx,y,z}”,但我不想一次指定一个。然后我尝试创建一个“类索引:Boolean[1,1,1]”,但是您不能从密封的Boolean类继承,并且尝试将其限制为[1,1,1],即使您可以,也不会起作用。然后我尝试创建一个别名“usingindex=System.Boolean[,];”,但这也不起作用 我还想让“儿童”成为只读的。您不应该更改它使用的词典或键。键的值只能设置一次,但在创建子项之前,您将不知道这些值是什么。我不知道这是否可能C# 设置字典中布尔数组的大小,c#,arrays,dictionary,tree,boolean,C#,Arrays,Dictionary,Tree,Boolean,我试图做一些概念上简单的事情,但由于某种原因我无法理解 我正在制作一个树结构(本例中为八叉树): 类八叉树 { 公共只读八叉树父树; 公共字典儿童; 公共只读bool[,]索引; } 布尔数组只能是[1,1,1],子字典只能包含8个键值对 我可以很好地得到这8个孩子,但我一辈子都搞不懂如何强制布尔数组只能是[1,1,1] 我环顾四周,找不到答案,这可能很简单,没人问过,但我在兜圈子 我尝试过创建一个“结构索引{boolx,y,z}”,但我不想一次指定一个。然后我尝试创建一个“类索引:Boole
非常感谢您提供的任何帮助。将您的字典设置为私有,并将密钥类型从bool数组更改为int
private readonly Dictionary<int, Octree> children = new Dictionary<int, Octree>();
其中GetIndex
可以如下所示:
private int GetIndex(bool x, bool y, bool z)
{
Func<bool, int> toInt = b => b ? 1 : 0;
return toInt(x) << 2
| toInt(y) << 1
| toInt(z);
}
“我一辈子都搞不清楚如何将布尔数组强制为[1,1,1]”听起来你最好使用自定义数据结构?我不明白你想用一个接一个的数组做什么。这不只是一个
bool
值吗?还是我误解了你所说的[1,1,1]
?你的问题是你无意中创建了一个三维数组,而你似乎想要一个由3bool
s组成的一维数组。但要为您提供解决方案,我们需要更好地了解您的用法。您将1
作为值,而不是使用true
或false
。您还将其称为一个永不改变的常数,这就是为什么您的字典只有一个键。你能更好地解释一下你的情况吗?我同意第一条评论。这个问题虽然让人困惑,但听起来很像a。要有8个坐标,你的声明应该是[2,2,2],正如其他人所指出的[1,1,1]只给出了我需要的1个元素,但只针对索引值,而不是子元素。我将尝试为它制作一个自定义索引器,为孩子们添加一个索引器将非常方便。谢谢公共结构索引{bool[]Index;public bool[]this[bool x,bool y,bool z]{get{return Index;}set{Index[0]=x;Index[1]=y;Index[2]=z;}}}}这是我一直在寻找的,使用索引作为键间接地限制了大小,所以现在应该可以使用了。
public Octree this[bool x, bool y, bool z]
{
get => children[GetIndex(x, y, z)];
set => children[GetIndex(x, y, z)] = value;
}
private int GetIndex(bool x, bool y, bool z)
{
Func<bool, int> toInt = b => b ? 1 : 0;
return toInt(x) << 2
| toInt(y) << 1
| toInt(z);
}
var root = new Octree();
root[true, false, false] = new Octree();