要分配给的 C# 元组

问题描述 投票:0回答:2

我需要一个像下面这样的数据结构,但我需要能够改变 bool 值。其他两个保持初始化时的状态。你会用什么来获得最佳性能?

Dictionary<string, (object, bool)> dic = new Dictionary<string, (object, bool)>();

我在想哈希表。但是哈希表就像一个带有键/值的字典。我示例中的对象和 bool 在概念上不像键/值,因为外部字典的其他值可以具有相同的对象(或者更好的是......对象类型)。我不想让别人看我的代码后认为对象和 bool 更相关,他们真的是。

提前谢谢你

c# performance tuples hashtable
2个回答
0
投票

使用两个具有相同键的并行词典:

Dictionary<string, object> dicObject = new Dictionary<string, object)>();
Dictionary<string, bool> dicBool = new Dictionary<string, bool)>();

这可以防止在 bool 更改时不得不重建元组。


0
投票

但我需要能够更改 bool 值。

您可以为键重新分配值:

var tuples = new Dictionary<string, (object Obj, bool Bool)>
{
    { "1", (new object(), true) }
};
tuples["1"] = (tuples["1"].Obj, true); // or tuples["1"] = (tuples["1"].Item1, true);

就我个人而言,我会保留它,但对于真正高性能的场景,您可以查看 CollectionMarshall:

ref var v = ref CollectionsMarshal.GetValueRefOrNullRef(tuples, "1");
if (!Unsafe.IsNullRef(ref v))
{
    v.Bool = false;
}

多一点 - 这里.

© www.soinside.com 2019 - 2024. All rights reserved.