这是Delphi 2009,因此Unicode适用.
我有一些代码将缓冲区中的字符串加载到StringList中,如下所示:
var Buffer: TBytes; RecStart, RecEnd: PChar; S: string;
FileStream.Read(Buffer[0], Size);
repeat
... find next record RecStart and RecEnd that point into the buffer;
SetString(S, RecStart, RecEnd - RecStart);
MyStringList.Add(S);
until end of buffer
Run Code Online (Sandbox Code Playgroud)
但是在一些修改过程中,我改变了逻辑,以便最终添加相同的记录,但是作为单独派生的字符串而不是通过SetString,即
var SRecord: string;
repeat
SRecord := '';
repeat
SRecord := SRecord + ... processed line from the buffer;
until end of record in the buffer
MyStringList.Add(SRecord);
until end of buffer
Run Code Online (Sandbox Code Playgroud)
我注意到的是StringList的内存使用从52 MB上升到大约70 MB.这增加了30%以上.
为了回到我的较低的内存使用量,我发现我必须使用SetString来创建字符串变量以添加到我的StringList,如下所示:
repeat
SRecord := '';
repeat
SRecord := SRecord + …Run Code Online (Sandbox Code Playgroud) 我很满意以下几点.
我有以下数组
var selectedItems = Set<String>()
Run Code Online (Sandbox Code Playgroud)
这有一些来自解析的项目
self.selectedItems.insert(objectToAppend)
Run Code Online (Sandbox Code Playgroud)
然后我创建了以下变量,我打算将Set转换为我可以在我的解析查询中使用以下行的东西.但几乎没有任何转变.[AnyObject, [String], [self.selectedHobbies], ["\(self.selectedHobbies)"]......没有用.
let itemsArray = self.selectedHobbies as [AnyObject]
Run Code Online (Sandbox Code Playgroud)
如果我不转换它,我不能在下面的查询中使用.
query.whereKey("itemTag", containedIn: itemsArray as [AnyObject])
Run Code Online (Sandbox Code Playgroud)
如果我能设法将其转换为[String]它将解决我的问题.不确定如何.
我正在创建一个歌曲播放应用程序.我有一个我在SharedPreferences中保存的Set.我想从中添加和删除文件名,并按照我添加它们的顺序保存它们,例如:
recentsp = getSharedPreferences("recentkey", Context.MODE_PRIVATE);
recent = recentsp.getStringSet("recent", recent);
recentedited = recent;
if (recentedited.contains(string) {
recentedited.remove(string);
Log.i(TAG, "Recent exists, removing song");
SharedPreferences.Editor editor = recentsp.edit();
editor.clear();
editor.putStringSet("recent", recentedited);
editor.commit();
}
recentedited.add(string);
Log.i(TAG, "adding song to recent");
SharedPreferences.Editor editor = recentsp.edit();
editor.clear();
editor.putStringSet("recent", recentedited);
editor.commit();
Run Code Online (Sandbox Code Playgroud)
但是当我在ListView中查看这些问题时会出现问题.我希望它们按照我添加它们的顺序,以便我可以有一个最近播放的部分,但有时它们根本不移动,或者它们可能最终在开头.这似乎是随机的.我错过了什么吗?
编辑:
我通过在初始化步骤中执行此操作来检查以确保SharedPreferences不为空...
编辑:
即使使用LinkedHashSet,我仍然没有得到正确的订购.如果SharedPreferences为null,我只调用它,所以我不确定如何确保我使用的是LinkedHashSet.
recentsp = getSharedPreferences("recentkey", Context.MODE_PRIVATE);
recent = recentsp.getStringSet("recent", null);
if (recent == null) {
recent = new LinkedHashSet<String>();
SharedPreferences.Editor editor = recentsp.edit();
editor.clear();
editor.putStringSet("recent", recent);
editor.commit();
}
Run Code Online (Sandbox Code Playgroud) 我正在做一个项目,要求我编写一个从集合中选择指定数量的随机元素的函数。然后将这些元素映射到变量以供以后比较。
因此,在我的方案中,我必须选择任何给定集合的5%。
let rec randomSet (a:Set<string>) =
let setLength = (a.Count / 100) * 5
let list = []
let rand = System.Random
if set.Length <> setLength then
// some code will go here
randomSet setLength eIDS
else
set
Run Code Online (Sandbox Code Playgroud)
^请批评我的代码,我只用F#编码一周。
我尝试递归地执行此操作,但是我感觉这是错误的方法。我尝试了其他方法,但是它们使用.take函数,因此每次返回的集合都是相同的。
有任何想法吗?我不是集合中的1个元素,而是集合中所有元素的5%。
这不是这样的问题:如何使用F#从列表中选择随机值
如果您认为是,请进行解释。
我是XCode编程的新手,作为第一次熟悉练习,我想制作一个小型的计算器应用程序.显然我遇到了一些问题:我尝试让用户使用按钮将数字和运算符键入字符串,然后他会看到.我用的时候
displayString = [NSString stringWithFormat:@"%@%@", displayString, operatorString];
Run Code Online (Sandbox Code Playgroud)
一切正常.然后我决定使用NSMutableStrings来获取deletebuttons.我适当地更改了头文件,之后我仍然是早期的NSString功能(?因为NSMutableString继承自NSString?)然后我遇到了以下问题:
[displayString setString:@"test"];
NSLog(@"%@", displayString);
Run Code Online (Sandbox Code Playgroud)
即使这是我打电话的第一种方法,我仍然没有.我做错了什么?
有没有办法让这个字符串写入某种功能:我希望能够做到
result = contentof:displayString
Run Code Online (Sandbox Code Playgroud)
或类似的东西.关于我如何做到这一点的任何想法?
编辑:这实际上是针对Android应用程序的,这意味着(据我所知),我只能使用HashSet.
Set<String> set = new HashSet<String>();
set.add("1");
set.add("2");
set.add("3");
set.add("4");
set.add("5");
set.add("6");
set.add("7");
set.add("8");
String[] array = set.toArray(new String[0]); // convert the set to an array
System.out.println(Arrays.toString(array)); // test what the set looks like
Run Code Online (Sandbox Code Playgroud)
输出是 [3, 2, 1, 7, 6, 5, 4, 8]
我期待,[1, 2, 3, 4, 5, 6, 7, 8]因为我假设它会按照添加它们的顺序将字符串添加到Set中.
在我的应用程序中,Set的顺序必须按照元素添加到Set的顺序.
有没有理由说这套装有故障?或者有没有办法将其重新添加到添加元素的顺序中?