订单数组取决于另一个的外观

时间:2015-08-21 18:10:01

标签: ruby-on-rails arrays ruby

假设我有2个用户阵列。

[user3, user1, user2]

基于第二个数组,我想对第一个数组进行排序,以便第二个数组中的出现位于第一个数组中。

所以第一个数组的结果是:

return_array = []
array1.each do |a|
  if array2.include? a
    return_array.push array1.pop(a)
  end
end
return_array.merge array1

我意识到,简单的方法是迭代第一个数组并填充一个空数组,如果第二个数组包含它,则对其进行排序,然后合并其余数组。以下是伪代码和未经测试的,但是我想到了一个简单的解决方案

window.onload = function() {

  var startPos;
  var geoOptions = {
    maximumAge: 5 * 60 * 1000,
    timeout: 10 * 1000
  }

  var geoSuccess = function(position) {
    startPos = position;
    document.getElementById('startLat').innerHTML = startPos.coords.latitude;
    document.getElementById('startLon').innerHTML = startPos.coords.longitude;
  };

  var geoError = function(position) {
    console.log('Error occurred. Error code: ' + error.code);
    // error.code can be:
    //   0: unknown error
    //   1: permission denied
    //   2: position unavailable (error response from location provider)
    //   3: timed out
  };

  navigator.geolocation.getCurrentPosition(geoSuccess);

  document.getElementById('location').innerHTML = geocodeLatLng;

  var geocodeLatLng = function(startPos) {

    var latlng = {lat: document.getElementById('startLat').innerHTML, lng: document.getElementById('startLon').innerHTML};
    console.log(startPos);

    function address(results, status) {

        if (results[6]) {
          return results[6].formatted_address;
        } else {
          console.log('No results found');
        }

    }
  }

};

有没有办法改进这个?例如,内置轨道或红宝石方法。

3 个答案:

答案 0 :(得分:3)

您应该使用数组交集和数组差异:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace HealthHabitat.Models
{
    public class Item
    {
        public int ItemID { get; set; }

        [Required, Display(Name = "Item Type")]
        public string Type { get; set; }

        [Required, Display(Name = "Item Name")]

        public string Name { get; set; }

        [Display(Name = "Item Quantity")]
        public int Quantity { get; set; }

        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:yyyy-mm-dd}", ApplyFormatInEditMode = true)]
        [Display(Name = "Expiry Date")]
        public DateTime Expiry_Date { get; set; }
        public int Consumption { get; set; }

        public virtual ICollection<OrderItem> OrderItems { get; set; }
    }
}

会给你你想要的东西。 交集手册:http://ruby-doc.org/core-2.2.0/Array.html#method-i-26 差异手册:http://ruby-doc.org/core-2.2.0/Array.html#method-i-2D

答案 1 :(得分:0)

你可以这样做:

array2 + (array1 - array2)

答案 2 :(得分:0)

my_array = ['user1', 'user2', 'user3']
my_array2 = ['user3']
my_array2 + (my_array.sort - my_array2)