kobe13485 2011-08-25 16:51 采纳率: 100%
浏览 449
已采纳

请将以下ruby代码改成php或者java

[code="ruby"]

compl1.rb - Redis autocomplete example

download female-names.txt from http://antirez.com/misc/female-names.txt

require 'rubygems'
require 'redis'

r = Redis.new

Create the completion sorted set

if !r.exists(:compl)
puts "Loading entries in the Redis DB\n"
File.new('female-names.txt').each_line{|n|
n.strip!
(1..(n.length)).each{|l|
prefix = n[0...l]
r.zadd(:compl,0,prefix)
}
r.zadd(:compl,0,n+"*")
}
else
puts "NOT loading entries, there is already a 'compl' key\n"
end

Complete the string "mar"

def complete(r,prefix,count)
results = []
rangelen = 50 # This is not random, try to get replies < MTU size
start = r.zrank(:compl,prefix)
return [] if !start
while results.length != count
range = r.zrange(:compl,start,start+rangelen-1)
start += rangelen
break if !range or range.length == 0
range.each {|entry|
minlen = [entry.length,prefix.length].min
if entry[0...minlen] != prefix[0...minlen]
count = results.count
break
end
if entry[-1..-1] == "*" and results.length != count
results << entry[0...-1]
end
}
end
return results
end

complete(r,"marcell",50).each{|res|
puts res
}

[/code]

  • 写回答

5条回答 默认 最新

  • myali88 2011-08-25 18:36
    关注

    [code="java"][/
    package nosql;

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.Set;

    import redis.clients.jedis.Jedis;

    public class RedisDemo {

    private final static String COMPLETE_KEY = "compl";
    
    private final static Jedis jedis = new Jedis("192.168.118.2");
    
    public static void main(String[] args) throws Exception {
        if(jedis.exists(COMPLETE_KEY)) {
            System.err.println("NOT loading entries, there is already a '" + COMPLETE_KEY + "' key\n");
        } else {
            setupCompletedSet();
        }
    
        Set<String> set = complete("ma" , 50);
        for (Iterator<String> iterator = set.iterator(); iterator.hasNext();) {
            System.out.println(iterator.next());
        }
    }
    
    private static void setupCompletedSet() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(RedisDemo.class.getResourceAsStream("female-names.txt")));
        String line = null;
        while((line = br.readLine()) != null) {
            for(int i = 1 ; i < line.length(); i++) {
                String prefix = line.substring(0, i);
                jedis.zadd(COMPLETE_KEY, 0, prefix);
            }
            jedis.zadd(COMPLETE_KEY, 0, line + "*");
        }
        System.out.println("finish to add all values to zset");
    }
    
    private static Set<String> complete(String prefix , int count) {
        Set<String> results = new HashSet<String>();
        int rangeLength = 50; // This is not random, try to get replies < MTU size
    
        Long start = jedis.zrank(COMPLETE_KEY, prefix);
        if (start != null && start > 0) {
            int begin = start.intValue();
            while(results.size() != rangeLength) {
                Set<String> rs = jedis.zrange(COMPLETE_KEY,begin,begin + rangeLength-1);  
                begin += rangeLength;
    
                if (rs == null || rs.size() == 0) {
                    break;
                }
    
                for (Iterator<String> iterator = rs.iterator(); iterator.hasNext();) {
                    String entry = (String) iterator.next();
                    int min = Math.min(entry.length(), prefix.length());
                    if (!entry.substring(0, min).equals(prefix.substring(0, min))) {
                        count = rs.size();
                        break;
                    }
    
                    if (entry.substring(entry.length() - 1).equals("*") && results.size() != count) {
                        results.add(entry.substring(0, entry.length()-1));
                    }
    
                }
    
            }
        }
    
        return results;
    }
    

    }
    code]
    试试,看行不行!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch