我有一组在A和B之间交替的数据。这些都是有效的选择:
A -> B -> AA -> B -> A -> BB -> A -> BB -> A -> B -> A我想利用类型系统来确保交替属性在编译时被检查,同时保持良好的性能。
struct A {
// data
next: Option<B>,
}
struct B {
// data
next: Option<Box<A>>,
}
Run Code Online (Sandbox Code Playgroud)
问题在于此数据结构的性能充其量是最差的。链接列表频繁发生高速缓存未命中,并且对于迭代数据结构而言,这是非常糟糕的。
enum Types {
A(DataA),
B(DataB),
}
type Data = Vec<Types>;
Run Code Online (Sandbox Code Playgroud)
使用此解决方案,缓存局部性要好得多,因此可以提高性能。但是,这并不能阻止2 As并排放置。还有一个事实是,每次迭代都需要检查类型,而由于非正式的定义,因此不需要。
struct A {
// data, default in first link = empty
b: Option<B>,
}
struct B {
// data
} …Run Code Online (Sandbox Code Playgroud) 我有一个班级又一个班级。我想跳过初始化过程的一部分,例如:
class Parent:
__init__(self, a, b, c, ...):
# part I want to keep:
self.a = a
self.b = b
self.c = c
...
# part I want to skip, which is memory and time consuming
# but unnecessary for the subclass:
self.Q = AnotherClass()
class Child(Parent):
__init__(self):
#a part of the parent initialization process, then other stuff
Run Code Online (Sandbox Code Playgroud)
我提出的两个解决方案是:
Parent类,该类不包含Child,或初始化的不需要部分哪个最好,或者有更好的方法?