小编Dan*_*ard的帖子

是否可以在javascript中创建一个固定长度的数组?

在Javascript中,是否有可能创建一个长度保证保持不变的数组?

例如,创建长度为2的数组A.随后,任何调用A.push()或A.pop()或设置A [5]的值的尝试都将失败.A.length总是2.

这是类型化数组(例如Float32Array)已经工作的方式.它们有固定的尺寸.但我想要一种在常规数组上获得相同行为的方法.

对于我的具体情况,我想创建一个固定长度的数组,其中每个条目都是一个对象.但我仍然想知道一般问题的答案.

javascript arrays

20
推荐指数
5
解决办法
3万
查看次数

定义一个需要特定类型序列的Swift协议

假设我们正在谈论Int类型的元素(但问题仍然适用于任何类型)

我有一些功能需要循环一系列Ints.但我不在乎幕后这个序列是作为一个数组,或一个Set或任何其他奇特的结构实现,唯一的要求是我们可以循环它们.

Swift标准库将协议SequenceType定义为"可以使用for ... in循环迭代的类型".所以我的直觉是定义这样的协议:

protocol HasSequenceOfInts {
    var seq : SequenceType<Int> { get }
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用.SequenceType不是可以专用的泛型类型,它是一种协议.任何特定的SequenceType 具有特定类型的元素,但它仅作为关联类型提供:SequenceType.Generator.Element

所以问题是:

我们如何定义需要特定类型序列的协议?

这是我尝试过的其他一些事情,以及为什么他们不对:

失败1

protocol HasSequenceOfInts {
    var seq : SequenceType { get }
}
Run Code Online (Sandbox Code Playgroud)

协议'SequenceType'只能用作通用约束,因为它具有Self或相关类型要求

失败2

protocol HasSequenceOfInts {
    var seq : AnySequence<Int> { get }
}
class ArrayOfInts : HasSequenceOfInts {
    var seq : [Int] = [0,1,2]
}
Run Code Online (Sandbox Code Playgroud)

我认为这个可行,但是当我尝试使用数组的具体实现时,我们得到了

类型'ArrayOfInts'不符合协议'HasSequenceOfInts'

这是因为Array不是AnySequence(令我惊讶的是......我的期望是AnySequence会匹配任何Ints序列)

失败3

protocol HasSequenceOfInts {
    typealias S : SequenceType
    var seq : S { get }
}
Run Code Online (Sandbox Code Playgroud)

编译,但序列seq的元素没有义务类型为Int

失败4 …

generics protocols swift

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

你怎么称呼自 UNIX 纪元以来的“天数”?

我最初了解到Unix时间是自1970年1月1日00:00:00(UTC)以来经过的秒数。一天有24小时,这意味着unix时间戳每天都会增长86400。

然后我听说了闰秒的概念,并认为这意味着也许在某些日子里,unix 时间戳会在一天内增长 86401 秒,但显然情况并非如此。根据我的阅读,每天都被视为恰好包含 86400 秒。当你得到闰秒时,操作系统会以某种方式“捏造”它,以确保仍然有 86400 个时间戳 - 要么让当天的每个“秒”比真正的 SI 秒长一点,要么他们会报告连续两次相同的整数时间戳。

所以我认为这意味着自 1970 年 1 月 1 日以来的每个日期都可以映射到一个唯一的整数,即当天 00:00:00 (UTC) 的时间戳除以 86400。(保证是一个没有余数的整数,因为每天讨论的必须有 86400 个时间戳)。或者,您可以采用当天的任何时间戳并计算floor(timestamp / 86400)

例如,今天,2021 年 4 月 23 日星期五 - UTC 时间 00:00:00 的时间戳为 1619136000。正如预期的那样,这是 86400 的倍数,并且 1619136000 / 86400 = 18740。自 Unix 纪元以来已经有 18740 天了。

所以我的问题是:

  1. 这个整数是否已经有一个众所周知的名字了?它是否已在软件中广泛用于表示日期?我在网上找不到任何关于这个概念的参考。
  2. 我的逻辑是否正确 - 每个日期确实有一个唯一的整数,并且您可以在代码中轻松地将其计算为timestamp_at_midnight_utc / 86400?或者是有一些我忽略的微妙问题。

我的动机是,我经常必须进行复杂的计算,涉及大量没有任何时间信息的日期(我在一家度假租赁公司工作,每个单位都有自己的可用性日历)。我认为,如果我使用唯一表示日期的整数而不是DateTime对象或字符串(如'2021-04-23'.

datetime date unix-timestamp

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

填充javascript类型数组的最佳方法?

使用文字数据填充javascript类型数组的最佳方法是什么?

最近我一直在使用javascript类型数组进行一些数学工作.特别是,我使用了很多Float32Array对象.

我经常需要手动填充它们的值.使用常规数组,可以使用以下文字语法:var a = [0,1,2];但似乎没有相同的方法来填充类型化数组,因此我发现我必须使用大量单独的语句;

var a = new Float32Array(3);
a[0] = 0;
a[1] = 1;
a[2] = 2;
Run Code Online (Sandbox Code Playgroud)

如果超过大约4个值,这会非常烦人.而且在脚本大小和javascript执行方面似乎都很浪费,因为它必须解释所有这些单独的语句.

我用过的另一种方法是创建一个setter函数:

var populateArray(a,vals) {
    var N = vals.length;
    for (var i=0; i<N; i++) {a[i]=vals[i];}
};
var a = new Float32Array(3);
populateArray(a,[0,1,2]);
Run Code Online (Sandbox Code Playgroud)

但这似乎也很浪费.我必须先创建一个与输入数组一样大的常规数组,然后输入populateArray函数,然后进行迭代.

所以......问题是:是否有更直接有效的方法用文字数据填充类型数组?

javascript literals typed-arrays

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

如何从我的XCode资产目录中获取CGImage

我正在开发XCode中的OSX项目.我在XCode中添加了一个图像集到我的资产目录.它被称为'Foo'.

我如何从中获得CGImage?

从中获取NSImage似乎非常简单:

let image = NSImage(named: "Foo")
Run Code Online (Sandbox Code Playgroud)

......但不是我需要的CGImage.

具体设置:OSX 10.11上的XCode 7.1在Swift 2.1中的El-Capitan编码导入Cocoa和MetalKit

编辑:有些人已经指出如何通过CGImageForProposedRect方法将NSImage转换为CGImage.我希望完全避开NSImage,因为它似乎是一个浪费的中间步骤.但也许这是访问您的图像资产的唯一方法?如果有人知道避免NSImage转换的方法会很好,否则我猜接受的答案是最好的方法.

macos xcode cgimage swift

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

为什么这些iptables规则会阻止http

我刚刚在新的CentOS 6.5安装上安装了apache.我在浏览器地址栏中输入了ip地址,但无法连接.然后我关掉iptables,然后刷新,这次我可以连接.

所以很明显iptables阻止了http(端口80)流量.

所以我查看了iptables规则(在新的Centos安装后未触及):

[root@centos ~]# iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  
Run Code Online (Sandbox Code Playgroud)

现在,我不是iptables专家,但我认为我理解它很好,可以解决这样一个简单的问题.但我很困惑,因为INPUT链中的第3行是这样的:

ACCEPT     all  --  anywhere …
Run Code Online (Sandbox Code Playgroud)

firewall centos iptables

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