首先请原谅我有点差的头衔.我不太确定如何说出来.如果有人可以建议一个更好的标题.
我试图找出是否有一种方法只将列表推导的每次迭代的值拆分一次,但在输出中使用它两次.我试图解决的问题的一个例子是:
我有字符串
a = "1;2;4\n3;4;5"
Run Code Online (Sandbox Code Playgroud)
我想执行此操作:
>>> [(x.split(";")[1],x.split(";")[2]) for x in a.split("\n") if x.split(",")[1] != 5]
[('2', '4'), ('4', '5')]
Run Code Online (Sandbox Code Playgroud)
无需分三次运行拆分.所以这样的事情(这显然是无效的语法,但希望足以传达消息):
[(x[1],x[2]) for x.split(";") in a.split("\n") if x[1] != 5]
Run Code Online (Sandbox Code Playgroud)
在这个问题中,我不是在寻找获得字符串第2和第3列的奇特方法.这只是提供具体例子的一种方式.我当然可以使用示例:
[x.split(";")[1:3] for x in a.split("\n")]
Run Code Online (Sandbox Code Playgroud)
我想到的可能的解决方案:
csv.DictReader
,命名我的列和类似的东西StringIO
给它输入.这大部分都是一个很好的模式,能够使用而不是一个特定的案例,所以很难回答"你为什么要这样做"或"这是什么"的问题
更新:在阅读下面的解决方案后,我去了一些速度测试.我在我的基本测试中发现,所提供的解决方案比上面的天真解决方案快35%.
我想让我的程序在屏幕上产生焦点,当它的键绑定被按下而不是在完成加载时当前焦点的屏幕上.
原因: 我目前的设置是Arch Linux + XMonad,我让它在6台显示器上运行.我已经使用XMonad大约一年了,我唯一的问题是需要一段时间才能打开的程序.例如,我第一次开始使用铬时需要3到几秒钟才能加载.我按下我的键绑定chrome,然后转到另一个屏幕做其他事情.但是当镀铬加载时,它会加载到屏幕上,而当前聚焦在屏幕上,而不是在按下生成键绑定时聚焦的屏幕上.
我的哈克尔技能很好......不存在.我以前在Lisp中编程并在C,python和JavaScript上花了很多时间,所以我确定如果需要的话我可以把它拿起来(所以请在答案中明确说明haskell样本).
提前致谢.
当主要主机在关闭后可用时,是否可以通过haproxy关闭与备份主机的所有连接?
我正在使用HAproxy为pubsub进行故障转移.
haproxy后端配置看起来像这样:
listen pubsub 0.0.0.0:1234
mode tcp
server primary primary.x.com:1234 weight 1 inter 500 rise 10 fall 5 check
server backup backup.x.com:1234 weight 1 inter 500 rise 10 fall 5 check backup
Run Code Online (Sandbox Code Playgroud)
我为发布和订阅方都建立了长期的连接.
问题出现在以下情况中:
primary
下跌降落A
连接backup
和发布B
连接backup
和订阅primary
固定,再次活着C
连接primary
并发布但未B
收到它D
连接primary
和订阅但不获取A
消息我能看到的这个问题的最佳解决方案是当主服务器再次可用时,让haproxy强制关闭与备份主机的所有连接.
我试图创造一个不断寻找新工作要做的未来,然后为这些工作项目维护一组未来。我想确保我的主要未来不会长时间被阻止工作,也不会同时完成我的工作。
这是我正在尝试做的事情的粗略概述。具体isDone
不存在,而且从我从文档中可以理解的内容来看,不一定是在 Rust 中使用期货的有效方法。做这种事情的惯用方法是什么?
use std::collections::HashMap;
use tokio::runtime::Runtime;
async fn find_work() -> HashMap<i64, String> {
// Go read from the DB or something...
let mut work = HashMap::new();
work.insert(1, "test".to_string());
work.insert(2, "test".to_string());
return work;
}
async fn do_work(id: i64, value: String) -> () {
// Result<(), Error> {
println!("{}: {}", id, value);
}
async fn async_main() -> () {
let mut pending_work = HashMap::new();
loop {
for (id, value) in find_work().await {
if !pending_work.contains_key(&id) {
let fut = …
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法,让我的光标移过文件末尾(无需添加大量需要稍后删除的空白行),这样当我编写一个长文件时,我就不会总是盯着看我显示器的最底部边缘。
完美的是我得到的相同行为,visualedit=all
除了文件结束后的换行符而不是行结束后的空格。
我有大约10个结构,每个结构之间有5-10个字段,我希望能够使用相同的格式将它们打印出来。
我的大多数结构如下所示:
struct Example {
a: Option<String>,
b: Option<i64>,
c: Option<String>,
... etc
}
Run Code Online (Sandbox Code Playgroud)
我希望能够定义一个impl
for,fmt::Display
而不必再次枚举字段,因此,如果添加了新字段,就不会丢失一个字段。
对于结构:
let eg = Example{
a: Some("test".to_string),
b: Some(123),
c: None,
}
Run Code Online (Sandbox Code Playgroud)
我想要输出格式:
a: test
b: 123
c: -
Run Code Online (Sandbox Code Playgroud)
我目前正在使用,#[derive(Debug)]
但我不喜欢它打印出来Some(X)
以及None
其他一些东西。
如果我知道结构中的所有值都是Option<T: fmt::Display>
我可以生成自己的Display
方法而不必再次列出字段?