给定64位数字,我需要从中提取每一位,并将其转换为数字:
decimal: 357
binary: 0000 0001 0110 0101
odd bits: 0 0 0 1 1 0 1 1
decimal: 27
Run Code Online (Sandbox Code Playgroud)
有没有想过一个好的算法方法呢?不,不是HW,这是真实的世界使用:)
这是一个微不足道的 Rust 自行车脱落问题,但我一直看到它以次优(冗长)的方式实现,我想知道 stdlib 是否应该有所帮助,或者是否有一个好的模式?
目标:
假设的理想代码——是否值得从 Rust stdlib 请求它或至少将其添加到 itertools(参见问题)?
fn print_functional(items: &[&str]) {
items.foreach_with_separator(
|elem| {
// some arbitrary complex item handling, not printing
print!("{elem}");
},
|| {
// some arbitrary complex "separator" handling
print!(", "),
}
);
}
Run Code Online (Sandbox Code Playgroud)
我主要看到这两种方法。由于格式化代码重复或冗长的上下文状态保留,它们不太理想。我的目标是仅使用 stdlib 来完成此操作,而不创建任何复杂的辅助函数。
fn main() {
let items = vec!["foo", "bar", "baz"];
print_with_var(&items);
print_split_last(&items);
}
fn print_with_var(items: &[&str]) {
let mut first_printed = false;
for elem in elems {
if first_printed {
print!(", ");
} …
Run Code Online (Sandbox Code Playgroud) 我需要使用表达式树生成代码,快速填充结构数组,T[]
其中T包含只读字段.我需要在GetUninitializedObject()+ IL或基于反射的setter之后初始化它.
更新:目前看来是不可能的.请在MS Suggestions投票
struct Strct
{
public readonly int Value;
}
Run Code Online (Sandbox Code Playgroud)
此代码失败:
Expression.Assign(
Expression.Field(structByIndexFromArrayExp, "Value"),
deserializedValueExp)
Run Code Online (Sandbox Code Playgroud)
在表达式树构造期间,我得到了这个错误:Expression must be writeable
从常规代码角度来看,这完全有意义,但在反序列化期间却没有.
FormatterServices.GetUninitializedObject()
返回一个对象,我猜我需要避免它,因为它是盒装的,因此显着慢.
初始化此类结构数组的最快方法是什么?
更新:目前我看到的唯一现实的方法是动态生成struct T的克隆,但没有字段上的readonly属性,填写它们,将两个数组修复到内存中并进行内存复制.请投票告诉微软解决它.
有更简单的方法吗?我需要获取表中的第一个值,其索引是整数但可能不会从[1]开始.谢谢!
local tbl = {[0]='a',[1]='b',[2]='c'} -- arbitrary keys
local result = nil
for k,v in pairs(tbl) do -- might need to use ipairs() instead?
result = v
break
end
Run Code Online (Sandbox Code Playgroud) 我想得到值,其WRITETIME值比某个时间更新.我尝试了这个查询,但它失败了:
SELECT zoom,idx FROM tiles
WHERE zoom=5 AND writetime(tile) > maxTimeuuid('2015-01-01 00:05+0000')
ALLOW FILTERING;
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
SyntaxException: <ErrorMessage code=2000 [Syntax error in CQL query]
message="line 1:68 no viable alternative at input '(' (...and idx > 0
and [writetime](...)">
Run Code Online (Sandbox Code Playgroud)
对于此表:
CREATE TABLE tiles (
zoom int,
idx int,
tile blob,
PRIMARY KEY (zoom, idx)
) WITH COMPACT STORAGE
Run Code Online (Sandbox Code Playgroud) 对于我的测试服务器,我没有复制Cassandra 2.1.6设置:
CREATE KEYSPACE v2 WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'} AND durable_writes = false; CREATE TABLE v2.tiles ( zoom int, idx int, tile blob, PRIMARY KEY (zoom, idx) )
对于每个缩放值,可能有数千万个小项目.对于zoom = 11,第一个idx在100352左右.当我需要迭代所有项目时,我总是看到特定存储情况的超时错误:
cqlsh:v2> select zoom,idx from tiles where zoom=11 limit 10;
ReadTimeout: code=1200 [Coordinator node timed out waiting for replica nodes' responses] message="Operation timed out - received only 0 responses." info={'received_responses': 0, 'required_responses': 1, 'consistency': 'ONE'}
Run Code Online (Sandbox Code Playgroud)
我得到"zoom = 11和idx> 1000"的相同错误.对于更接近现有项目的idx值,它会给出正确的结果:
cqlsh:v2> select zoom,idx from tiles where zoom=11 and …
Run Code Online (Sandbox Code Playgroud) 我可以使用此代码创建一个输入文本框。在同一行添加标签,同时仍将其绑定到同一个全局变量的最佳方法是什么?
viewof myText = html`<input type="text" value="initial value">
我想
viewof myText = html`Enter something: <input type="text" value="initial value">
但 myText 不绑定到输入字段。
如果可用(在运行时测试),实现使用特定 CPU 指令的同一功能的多个版本的最佳方法是什么,或者如果没有,则回退到较慢的实现?
例如,x86 BMI2 提供了非常有用的PDEP指令。我将如何编写 C 代码,以便它在启动时测试正在执行的 CPU 的 BMI2 可用性,并使用两种实现之一——一种使用_pdep_u64
调用(可用-mbmi2
),另一种使用 C 进行“手动”位操作代码。是否有对此类情况的内置支持?在提供对较新的内在函数的访问的同时,如何让 GCC 为较旧的 arch 编译?我怀疑如果通过全局函数指针而不是每次都使用 if/else 调用函数,执行速度会更快吗?
给定 Leaflet 缩放级别 (0..22),我将如何计算 geoMercator 投影的 D3 缩放值?当 zoom=0 时,整个世界都适合在单个图块 (256x256) 内。在瓦片中,世界大小是 2^zoom x 2^zoom 瓦片。
如何将 Rust 泛型类型限制为空类型?我需要创建一个具有可选值的类型,这样如果泛型类型是()
,它就不会使用任何内存。这是一个简单的例子 -Data
可以是 a i32, ()
(4 字节),也可以是i32, i32
(8 字节)。add()
两种情况都有一个。我收到此错误(这是有道理的,但不确定如何避免它)。我需要处理所有有效的数字类型。
error[E0119]: conflicting implementations of trait `std::ops::Add` for type `Data<(), ()>`
...
note: upstream crates may add a new impl of trait `num_traits::Num` for type `()` in future versions
Run Code Online (Sandbox Code Playgroud)
error[E0119]: conflicting implementations of trait `std::ops::Add` for type `Data<(), ()>`
...
note: upstream crates may add a new impl of trait `num_traits::Num` for type `()` in future versions
Run Code Online (Sandbox Code Playgroud)