首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自AOSP存储库的SortCursor如何排序它的值

来自AOSP存储库的SortCursor如何排序它的值
EN

Stack Overflow用户
提问于 2016-02-13 11:31:00
回答 1查看 231关注 0票数 0

我正在尝试使用SortCursor类,该类来自如何将两个游标表示为一个排序游标?中提到的AOSP。然而,它似乎没有排序,我给出的游标。分类是怎么工作的?

示例代码:

代码语言:javascript
复制
String[] columnNames = {"name", "value"};

MatrixCursor matrixCursor1 = new MatrixCursor(columnNames);
matrixCursor1.addRow(new String[]{"cursor 1 value A", "9"});
matrixCursor1.addRow(new String[]{"cursor 1 value B", "2"});
matrixCursor1.addRow(new String[]{"cursor 1 value C", "1"});

MatrixCursor matrixCursor2 = new MatrixCursor(columnNames);
matrixCursor2.addRow(new String[]{"cursor 2 value A", "70"});
matrixCursor2.addRow(new String[]{"cursor 2 value B", "8"});
matrixCursor2.addRow(new String[]{"cursor 2 value C", "6"});

Cursor sortCursor = new SortCursor(new Cursor[]{matrixCursor1, matrixCursor2}, columnNames[1]);
while (sortCursor.moveToNext()) {
    String name = sortCursor.getString(sortCursor.getColumnIndexOrThrow(columnNames[0]));
    String value = sortCursor.getString(sortCursor.getColumnIndexOrThrow(columnNames[1]));;
    Log.v("SortCursor", "Name: " + name + ", Value: " + value);
}
sortCursor.close();

运行以下代码时输出:

代码语言:javascript
复制
V/SortCursor: Name: cursor 2 value A, Value: 70
V/SortCursor: Name: cursor 2 value B, Value: 8
V/SortCursor: Name: cursor 2 value C, Value: 6
V/SortCursor: Name: cursor 1 value A, Value: 9
V/SortCursor: Name: cursor 1 value B, Value: 2
V/SortCursor: Name: cursor 1 value C, Value: 1

如您所见,这些值是完全没有排序的。我期望1,2,6,8,9,70。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-13 11:31:00

关于SortCursor有两件重要的事情要知道。

1.从游标中读取值为字符串,而不是数字,因此字符串"70“比字符串"8”要小。

2. --它只在寻找最小值时比较每个游标的下一个值。因此,每个单独的游标在被赋予SortCursor之前都必须进行排序。

因此,在给定的例子中,"70“小于"9”,第一个是"9“,然后"8”小于"9“,接下来是"6”,“6”小于“9”,接下来就是“9”。然后只保留第一个游标中的值。

正如您所看到的,您使用的游标实际上是排序的,它只是没有按您预期的方式排序。

如果在创建SortCursor之前对单个游标进行排序,并使用字符串而不是数字,则会得到预期的结果。

代码语言:javascript
复制
MatrixCursor matrixCursor1 = new MatrixCursor(columnNames);
matrixCursor1.addRow(new String[]{"cursor 1 value C", "01"});
matrixCursor1.addRow(new String[]{"cursor 1 value B", "02"});
matrixCursor1.addRow(new String[]{"cursor 1 value A", "09"});

MatrixCursor matrixCursor2 = new MatrixCursor(columnNames);
matrixCursor2.addRow(new String[]{"cursor 2 value C", "06"});
matrixCursor2.addRow(new String[]{"cursor 2 value B", "08"});
matrixCursor2.addRow(new String[]{"cursor 2 value A", "70"});

会给你

代码语言:javascript
复制
V/SortCursor: Name: cursor 1 value C, Value: 01
V/SortCursor: Name: cursor 1 value B, Value: 02
V/SortCursor: Name: cursor 2 value C, Value: 06
V/SortCursor: Name: cursor 2 value B, Value: 08
V/SortCursor: Name: cursor 1 value A, Value: 09
V/SortCursor: Name: cursor 2 value A, Value: 70
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35379301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档