我正在尝试使用SortCursor类,该类来自如何将两个游标表示为一个排序游标?中提到的AOSP。然而,它似乎没有排序,我给出的游标。分类是怎么工作的?
示例代码:
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();运行以下代码时输出:
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。
发布于 2016-02-13 11:31:00
关于SortCursor有两件重要的事情要知道。
1.从游标中读取值为字符串,而不是数字,因此字符串"70“比字符串"8”要小。
2. --它只在寻找最小值时比较每个游标的下一个值。因此,每个单独的游标在被赋予SortCursor之前都必须进行排序。
因此,在给定的例子中,"70“小于"9”,第一个是"9“,然后"8”小于"9“,接下来是"6”,“6”小于“9”,接下来就是“9”。然后只保留第一个游标中的值。
正如您所看到的,您使用的游标实际上是排序的,它只是没有按您预期的方式排序。
如果在创建SortCursor之前对单个游标进行排序,并使用字符串而不是数字,则会得到预期的结果。
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"});会给你
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: 70https://stackoverflow.com/questions/35379301
复制相似问题