QT开发:如何声明一个int型数组?且做到以下条件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT开发:如何声明一个int型数组?且做到以下条件相关的知识,希望对你有一定的参考价值。

我起了一个QTimer在里面不停的产生随机数,然后再存入声明的int型数组中,一次只能存7个,若产生了第8个随机数自动替换掉数组中第一个数,以此类推,这该怎么做?

参考技术A 这和Qt关系不大,就是C++呗

在 Realm Swift 中声明一个 Int 数组

【中文标题】在 Realm Swift 中声明一个 Int 数组【英文标题】:Declare an array of Int in Realm Swift 【发布时间】:2016-05-15 21:58:30 【问题描述】:

如何在RLMObject 中声明整数数组?

喜欢:

dynamic var key:[Int]?

给出以下错误:

Terminating app due to uncaught exception 'RLMException', reason: ''NSArray' is not supported as an RLMObject property. All properties must be primitives, NSString, NSDate, NSData, RLMArray, or subclasses of RLMObject. See https://realm.io/docs/objc/latest/api/Classes/RLMObject.html for more information.'

【问题讨论】:

【参考方案1】:

幸运的是,Realm 3.0 及更高版本现在支持原始类型数组。 (2017 年 10 月 31 日)

您现在可以直接在 RLMArrays 或 Lists 中存储原始类型或其可为空的对应物(更具体地说:布尔、整数和浮点数类型、字符串、日期和数据)。如果要定义此类原始值的列表,则不再需要定义繁琐的单字段包装器对象。相反,您可以只存储原始值本身!

class MyObject : Object 
    @objc dynamic var myString: String = ""
    let myIntArray = List<Int>()

来源:https://realm.io/blog/realm-cocoa-reaches-3-0/

【讨论】:

不管怎样,如果你选择使用 List 这样的 Primitives,你将无法使用 @count 谓词样式过滤 Results,因为它不受支持Lists of Primitives 。也就是说,将它们包装在 Realm 对象中有其自身的缺点......来自docs.mongodb.com/realm/sdk/ios/examples/filter-data:“评估给定集合中的对象数量。目前仅支持对多关系集合而不支持原语列表。为了在原语列表上使用@count,请考虑将原语包装在 Realm 对象中。”【参考方案2】:

接受的报价在内存方面非常昂贵。 您可能会得到一个包含非常大“n”个对象的列表。

这不是对与错的问题,但我认为在这里写一个不同的解决方法很好。

另一种方法: 我决定使用单个字符串来表示一个 Int 数组。

在我的 Realm 类中,我定义了一个变量:

dynamic var arrInt: String? = nil

而且非常容易使用:

let arrToSave = [0, 1, 33, 12232, 394]
<MY_CUSTOM_REALM_CLASS>.arrInt = arrToSave.map  String(describing: $0) .joined(separator: ",")

还有回来的路:

let strFetched = <MY_CUSTOM_REALM_CLASS>.arrInt 
let intArray = strFetched.components(separatedBy: ",").flatMap  Int($0) 

很高兴听到您的反馈,因为我认为这种方法更好。

【讨论】:

为什么投反对票?我将此答案作为对我有用的提案提出,如果您不喜欢此解决方案,请分享您的想法,不要只是投反对票。 使用description 是一个非常非常糟糕的主意。使用这个:到:let stringOfArray = arrToSave.map String(describing: $0) .joined(separator: ",")。来自:let intArray = stringOfArray.components(separatedBy: ",").flatMap Int($0) 【参考方案3】:

不幸的是,还不支持原语列表。有问题#1120 跟踪添加对此的支持。您会发现一些想法,您可以如何解决当前的问题。

最简单的解决方法是创建一个对象来保存 int 值。然后模型就拥有了一个List对象。

class Foo: Object 
    let integerList = List<IntObject>() // Workaround


class IntObject: Object 
    dynamic var value = 0

【讨论】:

Realm 居然不支持这么简单的东西,真是不可思议。 支持还没有实现吗? 还没有。但是Realm核心团队现在正在努力。很快就会得到支持。 现在好像支持了,从 v3.0.0-beta.4 github.com/realm/realm-cocoa/releases/tag/v3.0.0-beta.4 @KimiChiu List&lt;Int&gt; 应该从 v3.0 开始工作 realm.io/blog/realm-cocoa-reaches-3-0 可能你错了。【参考方案4】:

正如错误消息所述,您必须使用 RLMArray - 或者更确切地说,它是 swift 等效的 List

见:Realm docs

【讨论】:

以上是关于QT开发:如何声明一个int型数组?且做到以下条件的主要内容,如果未能解决你的问题,请参考以下文章

编写一函数,将一个3×3的整型二维数组行列互换

C语言中如何将double型数据转换为数组?

java编程,声明一个类,定义一个方法以计算一维数组中的最大值并返回该值,参数为int[]型

Swift 泛型

定义数组类型

在 Realm Swift 中声明一个 Int 数组