小编Yur*_*rik的帖子

从二进制数中提取ODD数字的最佳方法

给定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,这是真实的世界使用:)

algorithm bit-manipulation

5
推荐指数
1
解决办法
927
查看次数

在 Rust 中处理列表 + 分隔符的最佳代码模式

这是一个微不足道的 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)

rust

5
推荐指数
1
解决办法
158
查看次数

如何使用C#中的表达式树在readonly值中初始化数组中的结构

我需要使用表达式树生成代码,快速填充结构数组,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属性,填写它们,将两个数组修复到内存中并进行内存复制.请投票告诉微软解决它.

.net c# serialization expression-trees

4
推荐指数
1
解决办法
1155
查看次数

如何在Lua中获得第一个表值

有更简单的方法吗?我需要获取表中的第一个值,其索引是整数但可能不会从[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)

lua lua-table

4
推荐指数
1
解决办法
1万
查看次数

如何根据WRITETIME过滤Cassandra结果

我想得到值,其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)

cql cassandra

4
推荐指数
1
解决办法
5144
查看次数

查询现有数据时的Cassandra ReadTimeout

对于我的测试服务器,我没有复制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)

cassandra cassandra-2.0

4
推荐指数
1
解决办法
9252
查看次数

如何在 Observablehq 中创建带标签的输入字段

我可以使用此代码创建一个输入文本框。在同一行添加标签,同时仍将其绑定到同一个全局变量的最佳方法是什么?

viewof myText = html`<input type="text" value="initial value">

我想

viewof myText = html`Enter something: <input type="text" value="initial value">

但 myText 不绑定到输入字段。

observablehq

4
推荐指数
2
解决办法
526
查看次数

使用较新的 CPU 指令支持构建向后兼容的二进制文件

如果可用(在运行时测试),实现使用特定 CPU 指令的同一功能的多个版本的最佳方法是什么,或者如果没有,则回退到较慢的实现?

例如,x86 BMI2 提供了非常有用的PDEP指令。我将如何编写 C 代码,以便它在启动时测试正在执行的 CPU 的 BMI2 可用性,并使用两种实现之一——一种使用_pdep_u64调用(可用-mbmi2),另一种使用 C 进行“手动”位操作代码。是否有对此类情况的内置支持?在提供对较新的内在函数的访问的同时,如何让 GCC 为较旧的 arch 编译?我怀疑如果通过全局函数指针而不是每次都使用 if/else 调用函数,执行速度会更快吗?

c x86 gcc inline-assembly compiler-optimization

4
推荐指数
1
解决办法
272
查看次数

计算墨卡托 d3 缩放以匹配传单缩放级别

给定 Leaflet 缩放级别 (0..22),我将如何计算 geoMercator 投影的 D3 缩放值?当 zoom=0 时,整个世界都适合在单个图块 (256x256) 内。在瓦片中,世界大小是 2^zoom x 2^zoom 瓦片。

map-projections mercator d3.js leaflet

3
推荐指数
1
解决办法
996
查看次数

使用 Rust 空类型作为通用绑定

如何将 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)

generics rust

3
推荐指数
1
解决办法
1214
查看次数