标签: setstring

为什么SetString在Delphi中使用较少的内存(使用Unicode)?

这是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)

delphi string unicode pchar setstring

8
推荐指数
1
解决办法
979
查看次数

在swift中将填充的Set <String>转换为[String]

我很满意以下几点.

我有以下数组

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]它将解决我的问题.不确定如何.

string setstring swift

6
推荐指数
1
解决办法
6227
查看次数

以正确的顺序将项添加到Set <String> Java

我正在创建一个歌曲播放应用程序.我有一个我在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)

java android setstring

3
推荐指数
1
解决办法
1481
查看次数

F#set &lt;string&gt;中的随机元素

我正在做一个项目,要求我编写一个从集合中选择指定数量的随机元素的函数。然后将这些元素映射到变量以供以后比较。

因此,在我的方案中,我必须选择任何给定集合的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#从列表中选择随机值

如果您认为是,请进行解释。

random f# function setstring

2
推荐指数
1
解决办法
246
查看次数

setString NSMutableString

我是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)

或类似的东西.关于我如何做到这一点的任何想法?

xcode calculator nsmutablestring setstring

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

Set <String>不会保持与添加元素的顺序相同的顺序

编辑:这实际上是针对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的顺序.

有没有理由说这套装有故障?或者有没有办法将其重新添加到添加元素的顺序中?

java set setstring

1
推荐指数
2
解决办法
5316
查看次数