我有一个数组[0, 0, 10, 0, 3, 1]
。我希望从这个数组中得到最多三个元素的索引,它们是:[2, 4, 5]
。
如何在不找到max元素的情况下删除它(make 0),然后找到下一个,删除它,最后找到第三个?我不能对这个数组进行排序,我需要从当前位置开始索引。
答案 0 :(得分:6)
Uri selectedImageUri = data.getData();
String[] filePathColumn = {MediaStore.MediaColumns.DATA};
CursorLoader cursorLoader = new CursorLoader(this, selectedImageUri, filePathColumn, null, null, null);
Cursor cursor = cursorLoader.loadInBackground();
int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
cursor.moveToFirst();
String picturePath = cursor.getString(columnIndex);
Bitmap bm;
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
bm = BitmapFactory.decodeFile(picturePath, options);
bgImage.setImageBitmap(bm);
或
a = [0, 0, 10, 0, 3, 1]
a.each_index.max_by(3){|i| a[i]} # => [2, 4, 5]
答案 1 :(得分:3)
function get_results() {
global $wpdb;
$result = $wpdb->get_results('select * from wp_cf7dbplugin_submits');
$ret = [];
foreach($result as $row) {
if(!isset($ret[$row->submit_time])) {
$ret[$row->submit_time] = array();
}
$ret[$row->submit_time][] = $row;
}
return $ret;
}
它是如何运作的?
arr = [1, 3, 2, 4]
n = 2
p arr.each_with_index.sort.map(&:last).last(n).reverse
#=> [3,1]
将返回一个数组数组。每个数组的构造如下arr.each_with_index.sort
,它们基于[value, index]
进行排序。在我们的示例中,它将返回value
。
[[1, 0], [2, 2], [3, 1], [4, 3]]
将循环遍历所有这些数组并获取数组的最后一个值(索引)并返回这些索引的数组。在我们的示例中,它将返回arr.map(&:last)
。现在我们有一个按升序排序的索引数组,因此第一个值是最小值,最后一个值是最大值。
[0, 2, 1, 3]
返回一个包含数组最后n个值的数组。由于数组按升序排列,因此最大n值是最后n个值。
arr.last(n)
恢复数组。这是可选的。如果你想让数组的第一个位置的最大值和最后的第N个最大值,那么使用反向,否则不要使用它。