簡體   English   中英

AOSP存儲庫中的SortCursor如何對它的值進行排序

[英]How does the SortCursor from the AOSP repository sort it's values

我正在嘗試使用AOSP中的SortCursor類,該類在如何將2個游標表示為1個已排序游標? 但是,它似乎根本不對我給出的游標進行排序。 排序如何進行?

示例代碼:

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。

關於SortCursor,有兩件重要的事情要知道。

1.它從游標中讀取的值是字符串而不是數字,因此字符串“ 70”小於字符串“ 8”。

2.僅在尋找最小值時比較每個游標的下一個值。 因此,在將每個游標分配給SortCursor之前,必須對其進行排序。

因此,在給定的示例中,“ 70”小於“ 9”,因此排在第一位,然后“ 8”小於“ 9”,從而排在其后,“ 6”小於“ 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: 70

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM