小编Har*_*nam的帖子

列表插入超出范围的索引 - 表现得像追加

我有一份清单

 a = [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

我什么时候做的

a.insert(100, 100)

[1, 2, 3, 100]
Run Code Online (Sandbox Code Playgroud)

因为列表最初的大小为4,我试图在索引100处插入值,它表现得像追加而不是抛出任何错误,因为我试图插入一个甚至不存在的索引.

它应该不扔

IndexError:列表赋值索引超出范围

当我尝试做的时候会抛出异常

a[100] = 100
Run Code Online (Sandbox Code Playgroud)

问题: 1.任何想法为什么它被设计为静默处理这个而不是通知用户异常?

个人意见 :

让我们看看其他语言在这种情况下的表现如何:

Ruby:

    > a = [1, 2]
    > a[100] = 100
    > a
 => [1, 2, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, …
Run Code Online (Sandbox Code Playgroud)

python python-2.7

21
推荐指数
4
解决办法
4958
查看次数

什么是JAXB和JAXRS?它们有什么关系?

对不起这个生硬的问题.但是很多人日复一日地使用这两个术语但我不知道.我做了一些关于这个的研究并且知道它是分开的.但不明白它是如何相关的.我将首先分享我对这两个的理解.

JAXB是XML-to-Java绑定技术,支持模式和Java对象之间以及XML实例文档和Java对象实例之间的转换.在内部,JAXB在xml和java之间进行所有这些转换.这是xml的解析器,然后它知道xml中的哪个组件对应于java中的内容并且它会中断.从JAXB转换此答案是通过xjc(或codgen插件)等工具完成的.映射可能就像

xsd:string java.lang.String

xsd:integer java.math.BigInteger

JaxRs与众不同.这是处理请求的一组规范.意思是它说"GET("/ foo")"意味着用url/foo处理一个get调用.它只说明了这一点.怎么做的?是的,这称为此规范的实现.有许多实现,如restlet,resteasy,jersey,apache cxf等.这类似于逻辑和你在数学中实现的方式.算法的想法是桶搜索.这可以以任何方式实现.在Java术语中,JaxRs是接口,这4个restlet,resteasy,jersey,apache cxf是接口的实现.

现在请说出我的理解是否正确.然后告诉他们如何相关.请帮忙 .如果可能,图片说明将更有帮助.

jax-rs jaxb restlet xml-binding resteasy

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

为什么rubocop或ruby风格指南不喜欢使用get_或set_?

我在我的项目上运行rubocop并修复它提出的抱怨.

一个特别的抱怨困扰着我

Do not prefix reader method names with get_
Run Code Online (Sandbox Code Playgroud)

我从这个投诉中无法理解,所以我查看了github中的源代码.

我找到了这个片段

    def bad_reader_name?(method_name, args)
      method_name.start_with?('get_') && args.to_a.empty?
    end

    def bad_writer_name?(method_name, args)
      method_name.start_with?('set_') && args.to_a.one?
    end
Run Code Online (Sandbox Code Playgroud)

所以建议或惯例如下:

1)实际上,当方法没有参数时,他们建议我们不要使用get_.否则他们允许get_

2)当方法只有一个参数时,他们建议我们不要使用set_.否则他们允许set_

这个公约或规则或建议背后的原因是什么?

ruby rubocop

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

为什么加权快速联合算法会考虑树的大小而不是它们的高度?

我正在观看Robert Sedgewick关于快速联盟改进的视频.(https://youtu.be/sEo6LlPxpHE?t=267)

在那里他使用树的大小而不是高度.实际上问题是找到根节点.如果高度很高,发现将很困难.所以我们应该找到一种方法来减轻身高的影响.只有我们比较高度才能达到预期的效果?将较短的树连接到较高的树而不是解决问题而是:将具有较少节点数的树连接到具有较大节点数的树?

以下案例怎么样? 在此输入图像描述

根据视频中的逻辑:

树的大小= 4

B树的大小= 7

如果你将A连接到B. 实际上我们正在使结果树更高(高度4).但是,如果我们基于树高度完成它,我们可以通过将树B连接到A来解决它.结果树的高度为3.

我对吗 ?如果错了我在哪里错了?

algorithm graph-algorithm data-structures union-find

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

postgres中FOR KEY SHARE的实际用途是什么?

我无法理解我将在哪里实际使用它。根据这里的文档它说

行为与 FOR SHARE 类似,只是锁较弱:SELECT FOR UPDATE 被阻止,但 SELECT FOR NO KEY UPDATE 不会被阻止。键共享 锁会阻止其他事务执行 DELETE 或任何 更改键值的UPDATE ,但不会阻止其他 UPDATE,也不会阻止 SELECT FOR NO KEY UPDATE、SELECT FOR SHARE 或 SELECT FOR KEY SHARE。

但我尝试过,它允许所有可能的更新。我什至尝试更换钥匙。可能是我无法理解文档所指的键(我认为这是这个答案中的外键,因为它没有像文档中所说的那样被阻止,所以我尝试更新所有内容并且一切都正常工作而没有被阻止)。我通过使用两个模拟两个并发事务的 psql 终端进行了实验。

交易1

db1=> begin;
BEGIN
db1=> SELECT * from table_base FOR key share;
 base_id | foreign_id | nonkey1 
---------+------------+---------
 112 |          2 | plaexpl
  21 |          2 | harish
 111 |          2 | harish
(3 rows)

db1=> select * from …
Run Code Online (Sandbox Code Playgroud)

postgresql

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

当array.array比列表更有效时?

当我遇到作者陈述的句子时,我正在阅读"流利的Python " 这本书

如果你需要存储1000万个浮点值,那么数组效率要高得多,因为数组实际上并不包含完整的成熟对象,只有表示其机器值的压缩字节 - 就像C语言中的数组一样.

我无法理解作者试图传达的内容.他怎么说'压缩字节'?'压缩字节存储'是什么意思?.python列表如何存储它?为什么不以那种方式存储它,如果这是使它有效的?

python arrays list

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

与equals相比,如何使用==运算符带来性能提升?

在约书亚布洛赫的有效JAVA中,当我读到关于静态工厂方法时,有一个声明如下

静态工厂方法从重复调用返回同一对象的能力允许类在任何时候保持对存在的实例的严格控制.执行此操作的类称为实例控制.编写实例控制类有几个原因.实例控制允许类保证它是单例(第3项)或不可实例化(第4项).此外,它允许不可变类(第15项)保证不存在两个相等的实例:a.equals(b)当且仅当a == b时.如果一个类提供了这种保证,那么它的客户端可以使用==运算符而不是equals(Object)方法,这可以提高性能.枚举类型(第30项)提供此保证.

为了研究==运算符如何带来性能改进,我得看看 String.java

我看到了这个片段

public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String) anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                            return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }
Run Code Online (Sandbox Code Playgroud)

通过性能提升,他的意思是什么?它如何带来性能提升.

他的意思是说以下内容

如果每个类都可以确保a.equals(b)当且仅当a == b时,这意味着它带来间接要求,即不能有对象引用2个不同的存储空间并且仍然保持相同的数据,即内存浪费.如果它们拥有相同的数据,则它们是同一个对象.这就是它们指向相同的内存位置.

我在这个推论中是对的吗?

如果我错了你可以指导我理解这个吗?

java performance equals referenceequals

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

放置在自定义指令中的ui-codemirror失败,没有错误

我试图从代码镜像角度库使用ui-codemirror角度指令,用例是我必须将它放在自定义指令中.

但是当我将它放在自定义指令中时,我无法在文本区域中看到代码镜像.事实上,文本区域变得不可编辑.

但是,当我将它放在自定义指令之外时,它按预期工作.

我附上了这个http://plnkr.co/edit/NVFuumrGq2FJ8d8EC8Xn?p=preview的小提琴代码 .我没有选择甚至调试,因为甚至没有错误.如果它是一个bug,我们无法得出结论.请指导我.

最新更新(2014年1月17日) -

我在代码镜像git hub repo中发布了相同的问题.工作的人确认这是一个错误,他现在不打算修复它.所以我们可以尝试解决方法.请参阅:https://github.com/angular-ui/ui-codemirror/issues/36#issuecomment-31925751

codemirror angularjs angular-ui angularjs-directive

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

在64位机器中,长期和长期在C中有相同的范围吗?

我在/usr/include/limits.h中看到了

/* Minimum and maximum values a `signed long int' can hold.  */
if __WORDSIZE == 64
 define LONG_MAX     9223372036854775807L
else
 define LONG_MAX     2147483647L
endif
define LONG_MIN      (-LONG_MAX - 1L)
/* Maximum value an `unsigned long int' can hold.  (Minimum is 0.)  */
if __WORDSIZE == 64
 define ULONG_MAX    18446744073709551615UL
else
 define ULONG_MAX    4294967295UL
endif
ifdef __USE_ISOC99

/* Minimum and maximum values a `signed long long int' can hold.  */
define LLONG_MAX    9223372036854775807LL
define LLONG_MIN    (-LLONG_MAX - 1LL)

/* Maximum …
Run Code Online (Sandbox Code Playgroud)

c linux

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

是否有将数组中某个范围内的一组元素复制到另一个数组中的范围的函数?

我的 javascript 代码中有一个地方需要执行如下操作

将一个数组中的指定范围复制到另一个数组中的指定范围。

操作类似于

1) java中的System.arraycopy ->

System.arraycopy(array1, index1, array2, index3, index4 - index4 + 1);
Run Code Online (Sandbox Code Playgroud)

2)复制进去 ->

copy(array2[index3:index4 + 1], array1[index1:index2+1])

3) 在 python 中切片 ->

array2[index3: index4 + 1] = arr[index1: index2+1]
Run Code Online (Sandbox Code Playgroud)

现在我正在手动迭代它并执行它。但是我没有在 js 中使用任何 util 函数来做到这一点。真的有吗?

更新 1:它应该完全复制而不是从两个给定数组中的任何一个中添加或删除元素。

它的行为应该像这样的实现:

function arraycopy(src, srcPos, dst, dstPos, length) {
    let j = dstPos;
    let tempArr = src.slice(srcPos, srcPos + length);
    for (let e in tempArr) {
        dst[j] =  tempArr[e];
        j++;
    }
};
Run Code Online (Sandbox Code Playgroud)

更新 2:(请谨慎查看下面的一些答案,看看它是否适合您的用例(例如在巨大的数据集案例中))下面的许多答案都以这种方式使用了拼接,如果范围在源数组中开始到结束,它会中断巨大的。它将抛出“RangeError:超出最大调用堆栈大小”...因为它将超过函数中允许的最大参数数。( …

javascript arrays

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