标签: mutable

如何从scala中的文件中读取不可变数据结构

我有一个由Jobs组成的数据结构,每个都包含一组Tasks.作业和任务数据都在以下文件中定义:

jobs.txt:
JA
JB
JC

tasks.txt:
JB  T2
JA  T1
JC  T1
JA  T3
JA  T2
JB  T1 
Run Code Online (Sandbox Code Playgroud)

创建对象的过程如下:
- 读取每个作业,创建它并通过id存储它
- 读取任务,通过id检索作业,创建任务,在作业中存储任务

读取文件后,永远不会修改此数据结构.所以我希望作业中的任务存储在一个不可变的集合中.但我不知道如何以有效的方式做到这一点.(注意:存储作业的不可变映射可能不可变)

这是代码的简化版本:

class Task(val id: String) 

class Job(val id: String) {
    val tasks = collection.mutable.Set[Task]() // This sholud be immutable
}

val jobs = collection.mutable.Map[String, Job]() // This is ok to be mutable

// read jobs
for (line <- io.Source.fromFile("jobs.txt").getLines) { 
    val job = new Job(line.trim)
    jobs += (job.id -> job)
}

// read tasks
for (line …
Run Code Online (Sandbox Code Playgroud)

scala mutable immutability data-structures

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

Java中是否有可写的迭代器?

在C +中,可以使用迭代器来写入序列.最简单的例子是:

vector<int> v;
for (vector<int>::iterator it = v.begin(); it!=v.end(); ++it) {
    *it = 42;
}
Run Code Online (Sandbox Code Playgroud)

我需要更复杂的东西 - 将迭代器保持为类成员以供以后使用.但我不知道如何从Java迭代器中获得这种行为.

Java中是否有可写的迭代器?
如果没有,那么取代它们的是什么?

java arrays iterator mutable

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

python:更改groupdict()返回的字典

修改标准库对象的方法返回的可变对象是否安全?

这是一个具体的例子; 但如果可能的话,我正在寻找一般答案.

#m is a MatchObject
#I know there's only one named group in the regex
#I want to retrieve the name and the value
g, v = m.groupdict().popitem()
#do something else with m
Run Code Online (Sandbox Code Playgroud)

这段代码安全吗?我担心通过改变groupdict()我会破坏对象m(我以后还需要它).

我对此进行了测试,随后对m.groupdict()的调用仍返回原始字典; 但据我所知,这可能与实现有关.

python object mutable

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

Java:寻找可变/可重新引用的弱引用实现

我正在寻找类似的弱引用实现java.lang.ref.WeakReference,但它提供了一种set()方法或一些其他方式来重新引用创建的弱引用对象.这是一个例子:

MutableWeakReference ref = new MutableWeakReference(someObject);
ref.set(anotherObject);
Run Code Online (Sandbox Code Playgroud)

我需要这个以避免对象创建,在我的情况下,将执行时间减慢一个数量级,因为我不断更改我的弱引用引用的对象.

我试图从JDK复制代码,但似乎不可能,因为java.lang.ref.Reference使用sun.misc.Cleaner内部的类.我也看了Android的实现,但它似乎依赖于Dalvik VM的垃圾收集.我想知道这是否真的可以在不改变JVM /环境的情况下实现.

java implementation weak-references mutable

5
推荐指数
0
解决办法
417
查看次数

传递函数的缺点?

我正在学习C++(来自java)并且最近发现你可以传递函数.这真的很酷,我认为非常有用.现在我正在考虑如何使用它,并且突然出现在我脑海中的一个想法是一个完全可定制的类.

对于完全可定制的类(代码),我的列车的最佳示例将是一个人类.人将拥有与P.有关的所有功能.后来人可以拿起一把剑(S),所以现在Person可以访问与P和S有关的所有功能.

这有限制或性能问题吗?这是草率的,只是简单的皱眉?

任何见解都是教育性的,谢谢.

〜Aedon

c++ class function mutable

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

Python范围可变与不可变的范围

首先,我要像其他人一样开始.我是python的新手.我的老师给了我这个问题:

def f(a, b, c):  
    a    = 1 
    c    = b 
    c[0] = 2 
a = 10 
b = [11, 12, 13] 
c = [13, 14, 15] 
f(a, b, c) 
print a, b, c
Run Code Online (Sandbox Code Playgroud)

它打印:

10 [2, 12, 13] [13, 14, 15]
Run Code Online (Sandbox Code Playgroud)

我理解,因为整数是不可变的,所以保持在10,但我不明白为什么b改变而c不改变.

python mutable immutability scoping

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

使用可变状态计算的惰性列表?

我想弄清楚如何在惰性列表的计算中使用可变状态.

例如,这是一个使用可变数组()实现的天真的Eratosthenes Sieve :

import Control.Monad.ST
import Data.Array.ST
import Data.Array.Unboxed
import Control.Monad
import Data.List

prime :: Int -> UArray Int Bool
prime n = runSTUArray $ do
    arr <- newArray ( 2 , n ) True :: ST s ( STUArray s Int Bool )
    forM_ ( takeWhile ( \x -> x*x <= n ) [ 2 .. n ] ) $ \i -> do
        ai <- readArray arr i
        when ( ai  ) $ forM_ [ i^2 …
Run Code Online (Sandbox Code Playgroud)

state haskell mutable lazy-evaluation

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

如何创建可用作实际字符串的可变字符串类?

我想创建一个表示字符串的python类,但可以有效地修改.我考虑过实现一个树状数据结构,但我不知道如何让它像字符串一样运行,这样它就可以用在所有类型的字符串函数中,例如在正则表达式中.

当然,每次需要时都可以从数据结构构造一个字符串,但这不是非常有效,并且浪费了数据结构的效率.

有任何想法吗?

python string mutable

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

C ++ 11中ConstExpr对象中的可变成员

在C ++ 14标准(ISO / IEC 14882:2014)中,第5.19节第2款(强调我的)中添加了“ 不可更改 ”一词:

条件表达式 e是一个核心常量表达式除非e的评价,如下所述抽象机(1.9),将评估下面的表达式中的一个的规则:

  • [...]
  • 左值到右值转换(4.1),除非将其应用于
    • [...]
    • 非易失性glvalue,它引用用constexpr定义的非易失性对象,或引用该对象的不可更改子对象,或者

因此,此代码在C ++ 14中不正确:

class A {
    public:
        mutable int x;
};

int main(){

    constexpr A a = {1};
    constexpr int y = a.x;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,在C ++ 11中是否正确?

这是缺陷报告(CD3)1405,他们提议在其中添加非可变的

当前,文字类类型可以具有可变成员。尚不清楚这是否会对constexpr对象和常量表达式造成任何特殊的问题,如果是这样,应该如何处理。

所以我会说这是正确的C ++ 11代码。尽管如此,我还是使用-std = c ++ 11尝试了Clang和GCC,并且都输出了一个错误,指出常量表达式中不允许使用可变变量。但是该约束是在C ++ 14中添加的,而在C ++ 11中则没有。

有谁知道该代码在C ++ 11中是否正确?

另请参阅缺陷报告(CD3)1428

c++ mutable constexpr c++11 c++14

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

Python中的可变和不可变

我是Python的新手,试图理解可变对象和不可变对象之间的区别。Python中的可变类型之一是列表。假设L = [1,2,3],则L具有指向对象[1,2,3]的ID。如果[1,2,3]的内容被修改,则L仍保留相同的id。换句话说,即使对象的大小和内容已更改,L仍与同一对象关联。

对于不可变的对象,我的理解是不允许修改对象。因此,如果使用新值重新分配了变量,则该变量将绑定到具有不同ID的新对象。我希望字符串的行为类似。但是我尝试修改一个字符串,但是字符串id并没有改变。

string = "blue"
for i in range(10):
    string = string + str(i)
    print("string id after {}th iteration: {}".format(i,id(string)))


string id after 0th iteration: 46958272
string id after 1th iteration: 46958272
string id after 2th iteration: 46958272
string id after 3th iteration: 47077400
string id after 4th iteration: 47077400
string id after 5th iteration: 47077400
string id after 6th iteration: 47077400
string id after 7th iteration: 47077400
string id after 8th iteration: 47077400
string id after 9th …
Run Code Online (Sandbox Code Playgroud)

python mutable immutability

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