在Redis中排序列表的数量?

时间:2015-06-04 06:19:15

标签: redis

是否可以按"列"对列表的数量进行排序?在Redis中是这样的:

vector<Point2f> imagePoints;
    for (int i = 0; i < 4; i++)
        imagePoints.push_back(point[i]);    // 2d image coordinates


    //Mat objPts(4, 1, CV_64F, pt);
    //Mat imgPts(4, 1, CV_64F, point);

    // camera parameters
    double Intrinsic[] = { fx, 0, cx, 0, fy, cy, 0, 0, 1 };
    Mat Camera_Matrix(3, 3, CV_64FC1, Intrinsic);

    double Distort[] = { k1, k2, p1, p2 };
    Mat DistortCoeffs(4, 1, CV_64FC1, Distort);

    // estimate camera pose
    Mat rvec, tvec; // rotation & translation vectors

    solvePnP(objectPoints, imagePoints, Camera_Matrix, DistortCoeffs, rvec, tvec);

1 个答案:

答案 0 :(得分:3)

是的,但您必须为其准备数据。一种方法是使用一个排序集,您可以在其中保留列表&#39;键名作为成员,分数作为第一个成员(&#34;列&#34;)。请注意,每当您对相关列表进行更改时,您都必须更新此已排序集。

在您的示例中,应使用以下内容创建排序集:

ZRANGEBYSCORE lists_index -inf +inf

要获取已排序的列表列表,请执行local t = {} for _, k in pairs(KEYS) do local s = redis.call('LINDEX', k, ARGV[1]) t[#t+1] = { s, k } end table.sort(t, function (a, b) return (a[1] < b[1]) end) local r = {} for i, v in pairs(t) do r[#r+1] = v[2] end return r

在OP的评论之后,

更新:,Lua将是解决这个问题的一种方式,如下:

$ redis-cli --eval sort_by_column.lua mylist mylist2 mylist3 , 0
1) "mylist2"
2) "mylist"
3) "mylist3"

以这种方式运行:

func animateMovement() {
     var newBottom = NSLayoutConstraint(
        item: self.logo,
        attribute: NSLayoutAttribute.Bottom,
        relatedBy: NSLayoutRelation.Equal,
        toItem: self.usernameField,
        attribute: NSLayoutAttribute.Bottom,
        multiplier: 1,
        constant: 15)
     self.view.layoutIfNeeded()
     self.oldBottom = newBottom
     UIView.animateWithDuration(1.0, animations: {
         self.view.layoutIfNeeded()
     }, completion: {})

但请注意,每次调用此排序操作时,使用此方法都需要更多资源(而不是连续维护的排序集)。