我一直想知道我是否可以在不使用keydown事件的情况下检测CTRL并SHIFT按下键.
原因是我在JavaScript中创建了某种Grid Viewer,并且我实现了通过按住CTRL或SHIFT键来选择不同的项目,因为它在大多数常见的查看器,编辑器等中起作用.
问题是当焦点不在页面的任何地方时.例如,我正在向书签添加页面.然后我按住CTRL或SHIFT单击该项目,但它正常运行,因为没有触发keydown.
有什么方法可以省略这个吗?也许不是,但对于将其视为我自己明显的Bug的客户来说,这可能会令人困惑.
我有以下pandas Dataframe:
import pandas as pd
data = {'one' : pd.Series([1.], index=['a']), 'two' : pd.Series([1., 2.], index=['a', 'b']), 'three' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(data)
df = df[["one", "two", "three"]]
one two three
a 1.0 1.0 1.0
b NaN 2.0 2.0
c NaN NaN 3.0
d NaN NaN 4.0
Run Code Online (Sandbox Code Playgroud)
我知道如何按列向上/向下移动元素,例如
df.two = df.two.shift(-1)
one two three
a 1.0 2.0 1.0
b NaN NaN 2.0
c NaN NaN 3.0
d NaN NaN 4.0
Run Code Online (Sandbox Code Playgroud)
但是,我想将行中的所有元素a …
我以为我有它,
void shiftArray(NSMutableArray *mutableArray, NSUInteger shift)
{
for (NSUInteger i = 0; i < [mutableArray count]; i++) {
NSUInteger newIndex = (i + shift) % [mutableArray count];
[mutableArray exchangeObjectAtIndex:i withObjectAtIndex:newIndex];
}
}
Run Code Online (Sandbox Code Playgroud)
当我换一个时,它将0,1,2,3,4变成0,2,3,4,1.
预期结果是4,0,1,2,3
我觉得我错过了一些明显的东西......
更新:感谢Matthieu,这就是我现在的功能.
void shiftArrayRight(NSMutableArray *mutableArray, NSUInteger shift) {
for (NSUInteger i = shift; i > 0; i--) {
NSObject *obj = [mutableArray lastObject];
[mutableArray insertObject:obj atIndex:0];
[mutableArray removeLastObject];
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道你可以制作一个通用的NSObject并在其中加入一些子类.它只是指针所以我猜它没关系,对吧?
很难打破将这些物体视为袋子的习惯,而不是指向袋子的指针.
一个简单的问题.我创建了基准测试(下面的链接),至少对我来说(运行chrome 18.0.1025),每次使用array.shift()读取数组前面的值似乎比使用while/for读取值快得多循环并通过索引访问它们.
我确信这不可能是正确的,因为shift()还有很多工作要做,但与此同时我看不出我能做些什么错误来解释这个相当极端的差异?
http://jsperf.com/some-array-reading-comparisons
感谢阅读,詹姆斯
我正在学习中间perl.现在我正在研究class的对象引用.在那里他们给了一个包
{
package Barn;
sub new { bless [], shift }
sub add { push @{ +shift }, shift }
sub contents { @{ +shift } }
sub DESTROY {
my $self = shift;
print "$self is being destroyed...\n";
for ( $self->contents ) {
print ' ', $_->name, " goes homeless.\n";
}
}
}
Run Code Online (Sandbox Code Playgroud)
在这个我无法理解带加号运算符的加号工作.在文中他们说,加号就像是赤字,它将被解释为软参考:@ {"shift"}
你能清楚地解释一下使用带加号算子的加号的工作吗?
考虑一下简单的代码:
UINT64 result;
UINT32 high, low;
...
result = ((UINT64)high << 32) | (UINT64)low;
Run Code Online (Sandbox Code Playgroud)
现代编译器会将其转换为真正的高位移位,还是将其优化为简单的副本到正确的位置?
如果没有,那么使用联合似乎比大多数人似乎使用的转变更有效.但是,让编译器优化它是理想的解决方案.
我想知道当他们需要额外的一点性能时我应该如何建议.
sub foo {
$arg1 = shift @_;
$arg2 = shift @_;
# ...
}
Run Code Online (Sandbox Code Playgroud)
这个成语有什么好处?我只看到比较明确地有工作的缺点$_[0],$_[1]......阵列具有被移位,这是费时.它被破坏了,所以在稍后的时间点,参数已经消失了(如果你再次需要它们并且用不同的值覆盖你的$ arg1,那就很难过).
我试图找出为什么如果我移动负整数-1我总是得到-1,例如:
echo -1 >> 64; // -1
echo -1 >> 5; // -1
echo -1 >> 43; // -1
echo -1 >> 1; // -1
Run Code Online (Sandbox Code Playgroud)
无论右移的第二个操作数是什么,-1都保持-1 ...我明白当你执行右移时你实际上是这样做的:
x >> y = x / 2^y
但是在x为-1的情况下,如果是,我这样做:
-1 >> 3 = -1 / 2^3
这个值不应该是-1/8 = -0.125吗?
感谢您的关注.
我正在寻找允许使用箭头键将元素聚焦在树视图中的解决方案。
目前,我有 treeView (ul) 和 treeNode (li)。每个 treeNode 可能有自己的 treeView 等等。每个 treeNode 都有tabIndex="0"属性来添加使用Tab键在 treeView 中导航的可能性。它工作正常。但我想添加键盘箭头支持来做同样的事情。
知道如何做到这一点吗?PS 我不想使用任何 3rd 方库,除了纯 React、JS。
<section>
<header>
{ title }
</header>
<ul>
<li>
<section>
<header>
{ title }
</header>
<ul>
// etc.
</ul>
</section>
</li>
</ul>
<section>Run Code Online (Sandbox Code Playgroud)
我有一个包含两列的数据框:类别和日期时间
我想创建一个新列,显示当前行与前一行的日期时间之间的差异,在每个 category 重新开始。
我拥有的:
Category Datetime
A 2018-02-01 01:51:04
A 2018-02-01 02:04:04
B 2018-02-01 02:28:34
B 2018-02-01 02:41:34
B 2018-02-01 02:45:34
Run Code Online (Sandbox Code Playgroud)
我想要的是:
Category Datetime Difference
A 2018-02-01 01:51:04 NaT
A 2018-02-01 02:04:04 00:13:00
B 2018-02-01 02:28:34 NaT
B 2018-02-01 02:41:34 00:13:00
B 2018-02-01 02:45:34 00:04:00
Run Code Online (Sandbox Code Playgroud)
编辑:
@sacul 我尝试了你的解决方案,df['Difference'] = list(by_group.apply(lambda x: x['Datetime']-x['Datetime'].shift()))但它给了我奇怪的结果......这是我正在使用的实际数据:
Category Datetime Difference
A 2/1/18 1:51 NaT
A 2/1/18 2:04 1 days 02:52:00
B 2/1/18 2:28 NaT
C 2/1/18 2:41 …Run Code Online (Sandbox Code Playgroud)