所以这是我的状态:
this.state = {
ids: ['A', 'E', 'C']
};
Run Code Online (Sandbox Code Playgroud)
我将如何修改状态,使索引1处的"E"变为"B"?例如:
this.setState({
ids[1]: 'B'
});
Run Code Online (Sandbox Code Playgroud)
怎么做?
所以我在python中遇到了一些非常奇怪的东西.我尝试将列表的引用添加到自身.代码可能有助于证明我所说的比我能表达的更好.我正在使用IDLE编辑器(交互模式).
>>>l=[1,2,3]
>>>l.append(l)
>>>print(l)
[1,2,3,[...]]
>>>del l[:-1]
>>>print(l)
[[...]]
Run Code Online (Sandbox Code Playgroud)
到目前为止,输出是预期的.但是当我这样做的时候.
y=l[:]
print(y)
Run Code Online (Sandbox Code Playgroud)
对我而言,似乎输出应该是
[[...]]
Run Code Online (Sandbox Code Playgroud)
但它是
[[[...]]]
Run Code Online (Sandbox Code Playgroud)
显然,它不是创建列表的副本,而是在y中引用列表.
y [0]是l返回True.我似乎无法找到一个很好的解释.有任何想法吗?
我在两个代码中做同样的事情.
在代码1中:我使用了a char *并使用mallocin 分配空间main.
在代码2中:我使用了一个char数组用于相同的目的.但为什么输出会有所不同?
代码1:
struct node2
{
int data;
char p[10];
}a,b;
main()
{
a.data = 1;
strcpy(a.p,"stack");
b = a;
printf("%d %s\n",b.data,b.p); // output 1 stack
strcpy(b.p,"overflow");
printf("%d %s\n",b.data,b.p); // output 1 overflow
printf("%d %s\n",a.data,a.p); // output 1 stack
}
Run Code Online (Sandbox Code Playgroud)
代码2:
struct node1
{
int data;
char *p;
}a,b;
main()
{
a.data = 1;
a.p = malloc(100);
strcpy(a.p,"stack");
b = a;
printf("%d %s\n",b.data,b.p); //output 1 stack
strcpy(b.p,"overflow");
printf("%d %s\n",b.data,b.p); …Run Code Online (Sandbox Code Playgroud) 假设我有一个应用程序,例如一个网站,我的objectcontext在请求期间离开.我应该缓存一些使用EF加载的数据,以避免读取数据库并提高性能.
好吧,我用EF读取数据,我将对象放在缓存中(说AppFabric,而不是内存缓存),但是可以延迟加载的相关数据现在为空(对此属性的访问会导致nullreferenceexception).我不想在一个请求中加载所有内容,因为它会太长,所以我希望按需加载,一旦读取,我想用新获取的数据完成缓存.
注意 :
我怎样才能做到这一点 ?
编辑:我用northwind数据库构建了这个样本,它正在工作:
class Program
{
static void Main(string[] args)
{
// normal use
List<Products> allProductCached = null;
using (NORTHWNDEntities1 db = new NORTHWNDEntities1())
{
allProductCached = db.Products.ToList().Clone<DbSet<Products>>();
foreach (var product in db.Products.Where(e => e.UnitPrice > 100))
{
Console.WriteLine(product.ProductName + " => " + product.Suppliers.CompanyName);
}
}
// try to use cache, but missing Suppliers
using (NORTHWNDEntities1 db = new NORTHWNDEntities1())
{
foreach (var product in allProductCached.Where(e => e.UnitPrice > 100)) …Run Code Online (Sandbox Code Playgroud) 我试图理解Java中浅层和深层复制的概念.关于这个主题有很多文章和问答,但每当我尝试在真正的Java代码中实现这些概念时,我都不清楚一切.
我基于理解的答案之一就是在这个链接中,通过模式解释深度和浅层复制.
我会在每个案例的实施情况下向您展示:
我在我的示例中使用了System.arraycopy()方法,因为我在许多文章中读到它执行浅拷贝(以及克隆方法)
public class Test {
public static void main(String[] args) {
NameValue[] instance1 = {
new NameValue("name1", 1),
new NameValue("name2", 2),
new NameValue("name3", 3),
};
NameValue[] instance2 = new NameValue[instance1.length];
// Print initial state
System.out.println("Arrays before shallow copy:");
System.out.println("Instance 1: " + Arrays.toString(instance1));
System.out.println("Instance 2: " + Arrays.toString(instance2));
// Perform shallow copy
System.arraycopy(instance1, 0, instance2, 0, 3);
// Change instance 1
for (int i = 0; i < 3; i++) …Run Code Online (Sandbox Code Playgroud) 如何在角度2中创建深层副本,我尝试使用let newObject = Object.assign({}, myObject)但仍然myObject反映了在newObject中完成的所有更改.
我以为我知道Python直到今晚.做这样的事的正确方法是什么?这是我的代码:
a = ["one", "two", "three"]
b = a # here I want a complete copy that when b is changed, has absolutely no effect on a
b.append["four"]
print a # a now has "four" in it
Run Code Online (Sandbox Code Playgroud)
基本上我想知道,而不是b = a步骤,我如何正确地制作列表或字典的副本,以便b更改时a不会随之改变?
我有一个指向带有union的结构的指针
所以我们说我们有
struct A {
union {
char **word;
struct A *B
} u;
};
Run Code Online (Sandbox Code Playgroud)
我有类型A*的变量x和y
typedef A* A_t;
A_t x;
A_t y;
Run Code Online (Sandbox Code Playgroud)
将x-> u = y->你足以复制联盟中的东西.
假设您使用嵌套的PHP数组创建一个复杂的数据结构,如下所示:
$a1 = array(
'b' => array('foo' => 1),
'c' => array('bar' => 1)
);
Run Code Online (Sandbox Code Playgroud)
想象一下,数组要更加嵌套,具有更多元素和更长,更有意义的名称.
如果需要经常访问$ a1的子结构,对于读写,可能会想要创建这样的"别名":
$b = &$a1['b'];
Run Code Online (Sandbox Code Playgroud)
然而,由于"任务"实际上改变了$ a1,这导致了巨大的混乱.
我认为许多缺乏经验的PHP开发人员(比如我)会认为$ b是在分配后对$ a1 ['b']的引用.真正发生的是$ b AND $ a1 ['b']变成对元素的引用array('foo' => 1),带来意想不到的后果.我发现这非常不直观.
假设您需要保留$ a1,但是您还需要$ a1的副本,让我们调用副本$ a2,并更改$ a2的一些元素:
$a2 = $a1; // Copy $a1 to $a2
$a2['b']['foo'] = 2; // GOTCHA! This will change $a1['b']['foo'] as well!
$a2['c']['bar'] = 2; // This will not change $a1['c']['bar'] however
Run Code Online (Sandbox Code Playgroud)
因为我们之前创建了对$ a1 ['b']的引用,所以该元素将通过引用分配,而$ a1的其余部分按值复制.这花了我几个小时才弄明白. …
如果您的问题作为此问题的重复项而被关闭,那是因为您有一些通用形式的代码
x = X()
# later...
x = x.y()
# or:
x.y().z()
Run Code Online (Sandbox Code Playgroud)
其中X是某种类型,它提供了y旨在z变异(修改)对象(X类型的实例)的方法。这可以适用于:
list、dict和setbytearray这种形式的代码很常见,但并不总是错误的。问题的明显迹象是:
与x.y().z()一样,会引发异常AttributeError: 'NoneType' object has no attribute 'z'。
有了x = x.y(),x就变成None, 而不是被修改的对象。这可能会被后来的错误结果发现,或者被像上面这样的异常(x.z()稍后尝试时)发现。
Stack Overflow 上有大量关于这个问题的现有问题,所有这些问题实际上都是同一个问题。之前甚至有多次尝试在特定上下文中涵盖同一问题的规范。然而,理解问题并不需要上下文,因此这里尝试一般性地回答:
代码有什么问题吗?为什么这些方法会这样,我们如何解决这个问题?
另请注意,当尝试使用 alambda(或列表理解)来产生副作用时,会出现类似的问题。
同样明显的问题可能是由因其他原因返回的方法引起的None …