相关疑难解决方法(0)

Ruby任务:将数字连接到间隔

我有一系列uniq号码.像这样:[1,2,3,4,7,8,10,12].它可以是未分类的.我需要的是获得这个数组的间隔:

intervals_for [1,2,3,4,7,8,10,12]
#=> "1-4, 7-8, 10,12"
Run Code Online (Sandbox Code Playgroud)

我有自己的解决方案:

def intervals_for(array)
  array.sort!
  new_array = []
  array.each do |a|
    if new_array.last and a == new_array.last.last+1
      new_array.last << a
    else
      new_array << [a]    
    end
  end
  new_array.map{|a| a.size > 1 ? "#{a.first}-#{a.last}" : a.first}.join(", ")
end
Run Code Online (Sandbox Code Playgroud)

但我认为这里的某个地方更清洁

ruby

9
推荐指数
1
解决办法
341
查看次数

如何将整数数组汇总为范围数组?

我想接受以下输入:

[1,2,4,5,6,7,9,13]
Run Code Online (Sandbox Code Playgroud)

把它变成如下的东西:

[[1,2],[4,7],[9,9],[13,13]]
Run Code Online (Sandbox Code Playgroud)

每个子数组代表一个整数范围.

ruby arrays algorithm functional-programming range

9
推荐指数
3
解决办法
623
查看次数

查找连续的子字符串索引

给定搜索字符串和结果字符串(保证包含搜索字符串的所有字母,按顺序不区分大小写),如何最有效地获取表示与字母对应的结果字符串中的索引的范围数组在搜索字符串中?

期望的输出:

substrings( "word", "Microsoft Office Word 2007" )
#=> [ 17..20 ]

substrings( "word", "Network Setup Wizard" )
#=> [ 3..5, 19..19 ]
#=> [ 3..4, 18..19 ]   # Alternative, acceptable, less-desirable output

substrings( "word", "Watch Network Daemon" )
#=> [ 0..0, 10..11, 14..14 ]
Run Code Online (Sandbox Code Playgroud)

这是一个自动完成搜索框.这是一个类似于Quicksilver 的工具的截图,它突出了我想要的字母.请注意 - 与我上面的理想输出不同 - 此屏幕截图不喜欢更长的单一匹配.
Colibri在搜索结果中用字母加下划线的屏幕截图

基准测试结果

对当前工作结果进行基准测试表明,@ tokland基于正则表达式的答案基本上与我提出的基于StringScanner的解决方案一样快,代码更少:

               user     system      total        real
phrogz1    0.889000   0.062000   0.951000 (  0.944000)
phrogz2    0.920000   0.047000   0.967000 (  0.977000)
tokland    1.030000   0.000000   1.030000 (  1.035000)
Run Code Online (Sandbox Code Playgroud)

这是基准测试: …

ruby autocomplete

5
推荐指数
1
解决办法
479
查看次数

将数组中的连续数字分组

我需要将连续数字添加到新数组中,如果它不是连续数字,则只将该值添加到新数组:

old_array = [1, 2, 3, 5, 7, 8, 9, 20, 21, 23, 29]
Run Code Online (Sandbox Code Playgroud)

我想得到这个结果:

 new_array = [
  [1,2,3],
  [5],
  [7,8,9]
  [20,21]
  [23],
  [29]
]
Run Code Online (Sandbox Code Playgroud)

有更简单的方法吗?

ruby arrays

4
推荐指数
2
解决办法
2228
查看次数

将数组转换为哈希键

如何将数组转换为具有0each循环值的哈希值.

例如,给定此数组:

[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

我想得到这个哈希:

{"1"=>0, "2"=>0, "3"=>0, "4"=>0}
Run Code Online (Sandbox Code Playgroud)

ruby arrays hash

2
推荐指数
1
解决办法
285
查看次数