小编Dro*_*com的帖子

填充swift字符串进行打印

我正在尝试打印所有填充到相同宽度的字符串列表.

在C中,我会使用类似printf("%40s", cstr),cstr是C字符串的地方.

在Swift中,我能想到的最好的是:

line += String(format: "%40s",string.cStringUsingEncoding(<someEncoding>))
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法 ?

string padding swift

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

在Ruby中处理大量文件时减速

我正在尝试创建一个包含大约64000个对象的大型数组.对象是截断的SHA256文件摘要.

这些文件位于256个子目录(名为00 - ff)中,每个子目录包含大约256个文件(每个文件略有不同).每个文件大小介于1.5KB到2KB之间.

代码如下所示:

require 'digest'
require 'cfpropertylist'

A = Array.new

Dir.glob('files/**') do |dir|
    puts "Processing dir #{dir}"
    Dir.glob("#{dir}/*.bin") do |file|
        sha256 = Digest::SHA256.file file
        A.push(CFPropertyList::Blob.new(sha256.digest[0..7]))
    end
end

plist = A.to_plist({:plist_format => CFPropertyList::List::FORMAT_XML, :formatted => true})

File.write('hashes.plist', plist)
Run Code Online (Sandbox Code Playgroud)

如果我处理16个目录(在上面用'files/0*'替换'files/**'),我在机器上花费的时间是0m0.340s.

但是,如果我尝试处理所有这些,处理大约34个目录后处理速度会急剧下降.

这是最新的OS X,使用股票红宝石.该机是2011年中期的iMac,配备12GB内存和3.4 GHz Intel Core i7.

限制因素似乎不是数组大小:因为如果我删除sha256处理而只是存储文件名,则没有减速.

有什么我可以做得更好或跟踪问题?我目前没有其他操作系统或机器来测试这是OS X还是机器特定的东西.

ruby macos performance

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

在Swift Dictionary中增加或初始化Int的最佳方法

给定一个目录和一个键,我想增加该键的值,如果它存在于字典中,或者将其初始化为1.

字典类型是Dictionary,但是按照设计,此键的值类型将始终为Int,因为它只会被此代码更改.

我到目前为止的代码如下所示,但希望以快捷的方式优化它.

        let v = dict[key] as? Int
        if v != nil {
            dict[key] = v! + 1
        } else {
            dict[key] = 1
        }
Run Code Online (Sandbox Code Playgroud)

swift

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

如何正确检查 off_t 值在 C 中转换为 size_t 时不会溢出?

我需要将 off_t 变量转换为 size_t 变量,并且我想检测是否可能发生溢出。在C.

我最初的尝试如下所示:

off_t fsize;
size_t len;

...

if(fsize >= 0 && fsize <= SIZE_MAX) {
   len = (size_t)fsize;
} else {
   abort();
}
Run Code Online (Sandbox Code Playgroud)

但是,编译器不喜欢我在有符号类型和无符号类型之间进行比较(fsize <= SIZE_MAX)。我也无法真正对 off_t 和 size_t 类型各自的大小做出假设。

c posix

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

使用NSXPCConnection时如何同步等待回复块

我正在使用NSXPCConnection,而我的接口调用之一有一个回复块,如下所示:

- (void)addItem:(NSData *) withLabel:(NSString *) reply:(void (^)(NSInteger rc))reply;
Run Code Online (Sandbox Code Playgroud)

我这样称呼:

__block NSInteger status;
[proxy addItem:data withLabel:@"label" reply:^(NSInteger rc)
         {
             status = rc;
         }
];
Run Code Online (Sandbox Code Playgroud)

我的理解是,答复块异步运行,并且有可能在方法返回后运行。

我想同步测试返回码,最好的方法是什么?


为了进一步阐明上面的代码段:proxy对象是NSXPCConnection使用该remoteObjectProxy方法从对象获得的远程对象。这是一个重要的细节,因为这会影响应答块在哪个队列上的调用。

cocoa multithreading xpc objective-c nsxpcconnection

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