我在解析类或表上有500条记录,现在需要从500条记录中获取10条随机记录?
请告诉我该怎么做。
ParseQuery<ParseObject> query = ParseQuery.getQuery(parseTableName);
query.setLimit(10);
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> parseObjects,com.parse.ParseException e) {
}
}
答案 0 :(得分:3)
最好的方法可能是编写一个下载500个对象的CloudCode模块,然后随机选择10个以在响应中发送到您的Android应用程序。这比将500个对象下载到您的设备并选择10更好。
自从我编写CloudCode以来已经有一段时间了,但是您可以执行以下操作。
在iOS应用程序中(你可以做一些工作来找到Android等价物):
[PFCloud callFunctionInBackground:@"get500obj" withParameters:@{} block:^(id result, NSError *error) {
// do something with result
}];
Parse.Cloud.define('get500obj', function(request, response) {
// for getting random element
Array.prototype.randomElement = function () {
return this[Math.floor(Math.random() * this.length)]
}
var query = new Parse.Query("your-object-class-name");
query.find({
success: function(results) {
var final10 = [];
for (var i = 0; i < 10; i++) {
var myRandomElement = results.randomElement()
if (final10.indexOf(myRandomElement) == -1) {
final10.push(myRandomElement);
} else {
i--;
}
}
response.success(final10);
},
error: function() {
response.error(error);
}
});
});
答案 1 :(得分:1)
这是一个Objective C代码示例。
PFQuery *query = [PFQuery queryWithClassName:@"MyTable"];
int count = [query countObjects];
int r = arc4random_uniform(count);
PFQuery *query2 = [PFQuery queryWithClassName:@"MyTable"];
query2.skip = r;
PFObject *result = [query2 getFirstObject];
`
答案 2 :(得分:0)
这是用于从Parse
中的给定类中获取随机对象的工作代码在云代码中,
Parse.Cloud.define("get10Obj",function(request,response)
{
query = new Parse.Query(request.params.movie);
Array.prototype.randomElement = function (min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
query.find ({
success: function(results) {
var final10 = [];
for (var i = 0; i < 5; i++) {
var myRandomElement = results.randomElement(0,results.length);
if (final10.indexOf(myRandomElement) == -1) {
final10.push(myRandomElement);
} else {
i--;
}
}
var datalist =[];
for(var j=0;j<final10.length;j++)
{
var index= final10[j];
datalist.push(results[index]);
}
response.success(datalist);
},
error: function() {
response.error(error);
}
});
});
在Android中,
HashMap<String, Object> params = new HashMap<String, Object>();
params.put("movie", "The Matrix");
ParseCloud.callFunctionInBackground("averageStars", params, new
FunctionCallback<ParseObject>() {
void done(ParseObject ratings, ParseException e) {
if (e == null) {
// Do your stuff
}
}
});
感谢st.derrick的最大提示。