小编Max*_*amy的帖子

如何使用Swift在stderr上打印?

我在Linux上使用Swift 2.2,我需要在标准错误流上编写一些调试输出.

目前,我正在做以下事情:

import Foundation

public struct StderrOutputStream: OutputStreamType {
    public mutating func write(string: String) { fputs(string, stderr) }
}
public var errStream = StderrOutputStream()

debugPrint("Debug messages...", toStream: &errStream)
Run Code Online (Sandbox Code Playgroud)

但是,我已将Swift升级到2.2.1,但似乎Foundation已不再可用.

如何使用Swift 2.2.1在标准错误流上编写(并且仍然可以在下一次升级时使用)?

linux swift swift2

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

多次运行之间同一程序的不同缓存未命中计数

我正在使用 Cachegrind 来检索没有 libc 编译的静态程序的缓存未命中次数(只是_start调用我的主函数和 asm 中的退出系统调用)。该程序是完全确定性的,指令和内存引用不会从一次运行到另一次运行发生变化。缓存与LRU完全关联作为替换策略。

然而,我注意到失误的数量有时会发生变化。更具体地说,在我转到不同的目录之前,未命中的次数始终相同:

 % cache=8 && valgrind --tool=cachegrind --I1=$((cache * 64)),$cache,64 --D1=$((cache * 64)),$cache,64 --L2=262144,4096,64 ./adpcm        
 ...
 ==31352== I   refs:      216,145,010
 ...
 ==31352== D   refs:      130,481,003  (95,186,001 rd   + 35,295,002 wr)
 ==31352== D1  misses:        240,004  (   150,000 rd   +     90,004 wr)
 ==31352== LLd misses:             31  (        11 rd   +         20 wr)
Run Code Online (Sandbox Code Playgroud)

如果我一次又一次地执行相同的命令,我将继续得到相同的结果。但是如果我从不同的目录运行这个程序:

 % cd ..
 % cache=8 && valgrind --tool=cachegrind --I1=$((cache * 64)),$cache,64 --D1=$((cache * 64)),$cache,64 --L2=262144,4096,64 ./malardalen2/adpcm
 ...
 ==31531== I   refs:      216,145,010 …
Run Code Online (Sandbox Code Playgroud)

c memory linux-kernel cachegrind

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

Bash变量替换

我有一个包含由空格分隔的四个数字的变量,例如:

a="12.3 423.4 11.0033 14.02"
Run Code Online (Sandbox Code Playgroud)

但有时,我有一个尾随的空格:

a="12.3 423.4 11.0033 14.02 "
Run Code Online (Sandbox Code Playgroud)

我想用"&"替换空格,为此,我做:

echo ${a// / & }
Run Code Online (Sandbox Code Playgroud)

这给了我:

12.3 & 423.4 & 11.0033 & 14.02
Run Code Online (Sandbox Code Playgroud)

或者如果我有一个尾随空格:

12.3 & 423.4 & 11.0033 & 14.02 & 
Run Code Online (Sandbox Code Playgroud)

我的问题是我不知道我的字符串末尾是否有空格而且我不想要任何额外的"&".什么是最优雅的方式来避免这个额外的角色?有没有办法说"如果一个空格和下一个字符替换一个数字"?

编辑:我知道我可以使用sed,但由于bash中有一个变量替换机制,我想知道如何使用它来做我想要的.我不知道如何在bash替换中写出"not end of line"或"is a digit".

bash

2
推荐指数
1
解决办法
415
查看次数

列表在Python中访问

我有两个这样的清单

Nodelist1=[[['B', 10], ['IN', 1000]], [['C', 15], ['OUT', 1001]], [['F', 30], ['IN', 1100]]]
Nodelist2= [[['G', 20], ['IN', 1000, 'OUT', 1111]], [['D', 25], ['INWARD', 1]]]
Run Code Online (Sandbox Code Playgroud)

我想要做的是我正在比较这两个列表

if len(Nodelist1[i][1])==len(Nodelist2[j][1]) 
Run Code Online (Sandbox Code Playgroud)

如果条件为真,那么我想删除Nodelist1[i][0]这是['B', 10]Nodelist1Nodelist2[j][1]它是['D', 25]Nodelist2.

然后我应该

Nodelist1 as [[['C', 15], ['OUT', 1001]], [['F', 30], ['IN', 1100]]]
Nodelist2 as [[['G', 20], ['IN', 1000, 'OUT', 1111]]]
Run Code Online (Sandbox Code Playgroud)

我的代码是这样的:

   if len(Nodelist1)>len(Nodelist2):
      for i in range(len(Nodelist1)):
         for j in range(len(Nodelist2)):
            if len(Nodelist1[i][1])==len(Nodelist2[j][1]):
                if Nodelist1[i][1]==Nodelist2[j][1]:
                    Nodelist1.remove(Nodelist1[i])
                    Nodelist2.remove(Nodelist2[j])  
                else:
                    Nodelist1.remove(Nodelist1[i]) …
Run Code Online (Sandbox Code Playgroud)

python

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

如何在Python中进行按位NOR门(编辑python数学为我工作)

说我写这个:

a=01100001 
b=01100010 
c=01100011 
d=01100100 
e=01100101 
Run Code Online (Sandbox Code Playgroud)

现在,每个字母都与给定的数字类似,我将如何处理相似的值:

Python会想要这样做:

a + b = 2200011
Run Code Online (Sandbox Code Playgroud)

但我想要它做的就是这个

  • 如果尝试将0和0加在一起,则显示1
  • 如果尝试将1和0加在一起,则显示0
  • 如果尝试将0和1加在一起,则显示0
  • 如果尝试将1和1加在一起,则显示0

我想做的是 a + b = 10011100

有没有办法在这个实例中编辑python算出数学的方式?

到目前为止,我已经给出了设置值来表示字母,但我想做的是改变python给我结果的方式来匹配上面的解释中的XOR门

所以任何人都可以给出代码的例子来给出设定值(1 + 1 = 0)(0 + 0 = 1)...例如

python bit-manipulation bitwise-operators

0
推荐指数
1
解决办法
4767
查看次数