如何在数组

时间:2016-06-05 11:43:38

标签: arrays ruby

我有一个数组[0, 0, 10, 0, 3, 1]。我希望从这个数组中得到最多三个元素的索引,它们是:[2, 4, 5]

如何在不找到max元素的情况下删除它(make 0),然后找到下一个,删除它,最后找到第三个?我不能对这个数组进行排序,我需要从当前位置开始索引。

2 个答案:

答案 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;
}

它是如何运作的?

  1. arr = [1, 3, 2, 4] n = 2 p arr.each_with_index.sort.map(&:last).last(n).reverse #=> [3,1]
  2. 将返回一个数组数组。每个数组的构造如下arr.each_with_index.sort,它们基于[value, index]进行排序。在我们的示例中,它将返回value

    1. [[1, 0], [2, 2], [3, 1], [4, 3]]
    2. 将循环遍历所有这些数组并获取数组的最后一个值(索引)并返回这些索引的数组。在我们的示例中,它将返回arr.map(&:last)。现在我们有一个按升序排序的索引数组,因此第一个值是最小值,最后一个值是最大值。

      1. [0, 2, 1, 3]
      2. 返回一个包含数组最后n个值的数组。由于数组按升序排列,因此最大n值是最后n个值。

        1. arr.last(n)
        2. 恢复数组。这是可选的。如果你想让数组的第一个位置的最大值和最后的第N个最大值,那么使用反向,否则不要使用它。