使用map快速修改Realm值

时间:2017-09-04 12:08:48

标签: swift realm

我想在Swift App中修改Realm数据库中的模型数据。这是我的代码:

print (pd.DataFrame(np.sort(df.values, axis=1), index=df.index))
         0        1       2        3      4     5
0      bob        g  george      jim      k  neil
1      bob        g  george      jim      k  neil
2      dan      joe       k    keith   pete     q
3      dan      joe       k    keith   pete     q
4      ben       ed       p  richard  steve     w
5  charlie    david  graham     josh      l     s
6      bob  charlie   david      jim      k     s

df1 = pd.DataFrame(np.sort(df.values, axis=1), index=df.index).drop_duplicates()
print (df1)
         0        1       2        3      4     5
0      bob        g  george      jim      k  neil
2      dan      joe       k    keith   pete     q
4      ben       ed       p  richard  steve     w
5  charlie    david  graham     josh      l     s
6      bob  charlie   david      jim      k     s

df2 = df.loc[df1.index]
print (df2)
  forename_1 surname_1 area_1 forename_2 surname_2 area_2
0     george      neil      g        jim       bob      k
2       pete     keith      k        dan       joe      q
4        ben     steve      w    richard        ed      p
5    charlie     david      s     graham      josh      l
6    charlie     david      s        jim       bob      k

理念很简单,遍历模型并将isSelected bool属性更改为true。但看起来它不起作用。为什么呢?

1 个答案:

答案 0 :(得分:2)

如果要修改原始map实例,并因此修改存储在Realm中的模型对象,则不应使用Results。 'map'不是一个变异函数,它遍历你的数组(或者在这种情况下,Results),对一个序列的每个元素应用一个转换,然后返回一个包含转换结果的新序列。 / p>

你真正需要的是forEach函数,它只迭代Array的元素并为每个元素执行闭包,但不返回网Array 。我目前无法对其进行测试,但我forEachArray的成员函数而不是NSFastEnumeration的成员函数,Results继承了forEach,我认为你无法使用Results实例上的try! realm.write { for model in realm.objects(CompanyModel.self) { model.isSelected = true } } ,因此您需要使用常规for循环来执行此操作。

let myArray=['1','2','3','4','5','6','7']
function RandomDraw(){
  const selectedIndex = Math.floor(Math.random() * myArray.length);
  const selected = myArray[selectedIndex]
  myArray = myArray.slice(0, selected).concat(myArray.slice(selected + 1));
  return selected;
}