求教楼层排序问题

要求正确楼层排序为: B2,B1,1F,2F,3F...10F,11F

现有这13个无序的楼层 怎么排列成上面的格式?
求教

luikore

1楼
,
19小时前

1人喜欢

sort_by {|f| f.start_with?('B') ? -f[1..-1].to_i : f.to_i}

 

__main__

2楼
,
5小时前

喜欢

a = %w{ 1F B2 B1 B4 B3 2F 10F 11F 3F }

a.sort! do |i1, i2|
is_b1 = i1.start_with? 'B'
is_b2 = i2.start_with? 'B'
n1 = i1.sub(/[a-z]/i, '').to_i
n2 = i2.sub(/[a-z]/i, '').to_i
case
when is_b1 != is_b2 then is_b1 ? -1 : 1
when is_b1 && is_b2 then n1 < n2 ? 1 : -1
else n1 < n2 ? -1 : 1
end
end puts a
 
__main__ 3楼 , 5小时前 喜欢

上面那个太啰嗦了,应该可以简化下

a = %w{ 1F B2 B1 B4 B3 2F 10F 11F 3F }

a.sort! do |i1, i2|
n1 = i1.sub(/[BF]/, {'F' => 0, 'B' => '-'}).to_i
n2 = i2.sub(/[BF]/, {'F' => 0, 'B' => '-'}).to_i
n1 < n2 ? -1 : 1
end
 
zfjoy520 4楼 , 4小时前 喜欢

@datty258
@luikore
想到有另外一种方法,不过还是@luikore 的方法最优,性能差距好几倍。

arr1 = (1 .. 18).collect { |i| ["B#{i}", "#{i}F"] }.flatten.shuffle

法一:arr2 = arr1.sort_by { |f| f.start_with?('B') ? -f[1..-1].to_i : f.to_i }

法二:arr3 = arr1.sort_by { |f| f.sub(/B/i, '-').to_i }

如果不考虑字母 'B' 的大小写问题,可以把sub后面的 'i' 去掉。性能又可以提升不少。
法三:arr4 = arr1.sort_by { |f| f.sub(/B/, '-').to_i } => ["B18", "B17", "B16", "B15", "B14", "B13", "B12", "B11", "B10", "B9", "B8", "B7", "B6", "B5", "B4", "B3", "B2", "B1", "1F", "2F", "3F", "4F", "5F", "6F", "7F", "8F", "9F", "10F", "11F", "12F", "13F", "14F", "15F", "16F", "17F", "18F"] arr2 == arr3
=> true arr3 == arr4
=> true

性能对比:

irb(main):336:0> i = Time.now; 1000.times { arr1.sort_by { |f| f.start_with?('B') ? -f[1..-1].to_i : f.to_i } }; Time.now - i
=> 0.04322 irb(main):337:0> i = Time.now; 1000.times { arr1.sort_by { |f| f.sub(/B/i, '-').to_i } }; Time.now - i
=> 0.171414 irb(main):338:0> i = Time.now; 1000.times { arr1.sort_by { |f| f.sub(/B/, '-').to_i } }; Time.now - i
=> 0.131904

ruby楼层排序问题的更多相关文章

  1. 编程之美—烙饼排序问题(JAVA)

    一.问题描述 星期五的晚上,一帮同事在希格玛大厦附近的"硬盘酒吧"多喝了几杯.程序员多喝了几杯之后谈什么呢?自然是算法问题.有个同事说:"我以前在餐      馆打工,顾 ...

  2. 安装cocoapods遇到两大坑-Ruby版本升级和Podfile的配置

    今天安装cocoapods #移除原有ruby源 $ gem sources --remove https://rubygems.org/ #使用可用的淘宝网 $ gem sources -a htt ...

  3. Unable to download data from http://ruby.taobao.org/ & don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

    安装cocoapods,记录两个问题! 1.镜像已经替换成了 http://ruby.taobao.org/, 还是不能不能安装cocoapods, 报错:Unable to download dat ...

  4. 安装了ruby后怎么安装sass

    在命令行中输入 ruby -v 查看版本号 先移除默认的https://rubygems.org源,命令为gem sources --remove https://rubygems.org/,按回车 ...

  5. ruby 基础知识(一)

    突然今天发现一大神的博客:http://www.cnblogs.com/jackluo/archive/2013/01/22/2871655.html    相信初学者会受益颇多 ruby  参考文档 ...

  6. ruby 基础知识(二)

    ruby  中的动态方法 http://singleant.iteye.com/blog/1680382 Rails 大量使用了符号(symbol).符号看上去很像变量名,不过以冒号作为前缀.符号的例 ...

  7. Ruby安装Scss

    Ruby安装Scss 引言 已经许久不写HTML了,今天有点以前的东西要改.但是刚装的Windows10,已经没有以前的Web开发环境了.只好重新安装. 结果Webstorm装好后配置Scss出现错误 ...

  8. fzf by ruby

    fzf by ruby */--> fzf by ruby 1 github地址 https://github.com/junegunn/fzf 2 简介 软件通过匿名管道和grep扩展了bas ...

  9. The Safe Navigation Operator (&.) in Ruby

    The most interesting addition to Ruby 2.3.0 is the Safe Navigation Operator(&.). A similar opera ...

随机推荐

  1. ModuleNotFoundError: No module named 'sqlite'

    解决 ModuleNotFoundError: No module named 'sqlite'.问题 今天在将Python2.7升级至Python3.6后导入sqlite模块时出现了一下报错,到网上 ...

  2. 微信公众平台如何与Web App结合?

    Web App简而言之就是为移动平台而优化的网页,它可以表现得和原生应用一样,并且克服了原生应用一些固有的缺点.一般而言Web App最大的入口是浏览器,但现在微信公众平台作为新兴的平台,结合其内置浏 ...

  3. Hyper-V启动虚拟机,消耗C盘大量磁盘空间

    问题描述 经常使用Hyper-V虚拟机的朋友,可能会碰到这样的现象,当启动某些虚拟机的是否,发现C盘的空间突然减少,减少的空间与虚拟机的内存一样大少. 通过分析C盘空间的磁盘文件,发现在Hyper-V ...

  4. 设计模式之工厂模式(Factory Pattern)

    一.什么是工厂模式? 1.“简单工厂模式”,Simple Factory Pattern 也就是常用的在Factory类中定义静态方法负责new对象的方式. 摘要中提到过“严格地说,这种被称为“简单工 ...

  5. Entity Framework学习记录

    记录一次ef code first的学习记录 最近想做一套自己的框架,正在寻找合适的ORM,之前参照力软(很早之前的版本了)的底层代码,做了一套自己的增删改查, 但是使用起来总觉得缺了点什么? 所以决 ...

  6. SQL处理数据并发,解决ID自增

    1 创建MaxIdProcess表,由于存储ID的最大值 CREATE TABLE [dbo].[MaxIdProcess]( ,) NOT NULL, --自增ID ) NOT NULL, --存储 ...

  7. WPF 改变Datagrid的选中行的颜色

    主要通过设置DataGrid的RowStyle和CellStyle即可. <Style TargetType="DataGridRow" x:Key="gridRo ...

  8. “System.Runtime.InteropServices.COMException”类型的第一次机会异常在 System.Windows.Forms.dll 中发生

    最近做一个winform项目,在里面用了webbrowser控件进行html文档打印,遇到了标题所示问题.根据查到的一些资料,在调试>异常>查找中输入“System.Runtime.Int ...

  9. OpenVswitch mirror 镜像功能

    # 从int-br-eth1进入的包镜像一份给dummy0 # 现象:dummy0 可以抓到 int-br-eth1 进入的包 modprobe dummy ip link set up dummy0 ...

  10. Cordova - OSX中,nodev7.5.0无法安装cordova解决方法!

    OSX:10.12.3 node:v7.5.0 结果很搞笑啊,先前怎么安装都不成功,现在居然安装成功了!我认为安装失败最大的原因是:你不能访问谷歌的原因!!!! 使用最新稳定版,有助于安装,可以顺便安 ...