- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
[102, 111, 111, 246] 是否有一个内置的方法去另一个-6ren">
在 ruby 1.9.3 中,我可以获得字符串的代码点:
> "foo\u00f6".codepoints.to_a
=> [102, 111, 111, 246]
是否有一个内置的方法去另一个方向,即从整数数组到字符串?
我知道:
# not acceptable; only works with UTF-8
[102, 111, 111, 246].pack("U*")
# works, but not very elegant
[102, 111, 111, 246].inject('') {|s, cp| s << cp }
# concise, but I need to unshift that pesky empty string to "prime" the inject call
['', 102, 111, 111, 246].inject(:<<)
更新(对尼克拉斯回答的回应)
有趣的讨论。pack("U*")
始终返回 UTF-8 字符串,而 inject
版本返回文件源编码中的字符串。
#!/usr/bin/env ruby
# encoding: iso-8859-1
p [102, 111, 111, 246].inject('', :<<).encoding
p [102, 111, 111, 246].pack("U*").encoding
# this raises an Encoding::CompatibilityError
[102, 111, 111, 246].pack("U*") =~ /\xf6/
对我来说,inject
调用返回一个 ISO-8859-1 字符串,而 pack
返回一个 UTF-8。为了防止错误,我可以使用 pack("U*").encode(__ENCODING__)
但这让我做了额外的工作。
更新 2
显然,根据字符串的编码,String#<< 并不总是正确附加。所以看起来 pack 仍然是最好的选择。
[225].inject(''.encode('utf-16be'), :<<) # fails miserably
[225].pack("U*").encode('utf-16be') # works
最佳答案
您自己尝试的最明显的改编是
[102, 111, 111, 246].inject('', :<<)
然而,这不是一个好的解决方案,因为它只有在初始空字符串文字具有能够容纳整个 Unicode 字符范围的编码时才有效。以下失败:
#!/usr/bin/env ruby
# encoding: iso-8859-1
p "\u{1234}".codepoints.to_a.inject('', :<<)
所以我实际上会推荐
codepoints.pack("U*")
我不知道“仅适用于 UTF-8”是什么意思。它创建了一个 UTF-8 编码的 Ruby 字符串,但是 UTF-8 可以容纳整个 Unicode 字符范围,那么问题是什么?观察:
irb(main):010:0> s = [0x33333, 0x1ffff].pack("U*")
=> "\u{33333}\u{1FFFF}"
irb(main):011:0> s.encoding
=> #<Encoding:UTF-8>
irb(main):012:0> [0x33333, 0x1ffff].pack("U*") == [0x33333, 0x1ffff].inject('', :<<)
=> true
关于ruby 1.9 - `string.codepoints.to_a` 最简单的逆运算是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10304754/
我的代码已经通过了所有测试条件(例如,数组、字符串、散列..)除了这个: ValidPalindromeTest.new(81,96).palindrome? 它应该返回 true 但没有。代码是:
请原谅我的问题,但我是 Ruby 的初学者。 我有一段代码,不知道如何将输出代码制作成一个数组。我尝试使用 Ruby to_a 方法但不起作用,我确信这真的很简单,但请帮助我!!! length =
each_slice 和to_a 的链接让我很困惑。我知道 each_slice 是 Enumerable 的成员,因此可以在数组等可枚举对象上调用,而 chars 确实返回一个字符数组。 我还知道
我正在尝试将数组分割为数组对。 例如:["A","B","C","D"] 应该变成 [["A","B"],["C""D"]. 我相信通过 arg.each_slice(2).to_a 我已经成功了。但
我需要将传入的参数(单个对象或集合)转换为数组。我不知道论点是什么。如果它已经是一个数组,我想保留它,否则从中创建一个单元素数组。我希望同时允许 method(:objs => obj) 和 meth
这个函数... class Invoice < ActiveRecord::Base def self.open_subtotal sum{ |i| i.open_amount / (1.
刚好遇到这段代码 Enumerator.new((1..100), :take, 5).to_a # => [] 有谁知道为什么它返回一个空数组而不是一个包含 5 个整数的数组? 最佳答案 来自文档,
to_a 和 to_ary 有什么区别? 最佳答案 to_ary用于隐式转换,而to_a用于显式转换。 例如: class Coordinates attr_accessor :x, :y d
例如: a = [1,2,3,4] b = a c = a.to_a a.insert(0,0) #=> [0,1,2,3,4] b #=> [0,1,2,3,4] c
我可以写一个简短的例子来验证 Enumerable 的 to_a 在内部调用 each。在这里: class MyFooClass include Enumerable def initial
Savon gem我正在使用的是返回单个对象或数组,在 SOAP 响应返回之前我无法知道它会是哪个。 为方便起见,我希望将一个nil 响应转换为[],将单个响应转换为[obj] 和一个数组保持为数组。
#entries 之间的基本区别是什么?和 #to_a Enumerable 的方法ruby 中的模块。两者似乎在 Hash 上返回相同的结果 >> hash = {"name" => "foo" ,
在 ruby 1.9.3 中,我可以获得字符串的代码点: > "foo\u00f6".codepoints.to_a => [102, 111, 111, 246] 是否有一个内置的方法去另一个
如果您有一个 Array 的子类 X,那么执行 X#to_a 会返回一个数组对象,而执行 X#to_ary 会返回一个 x 对象。 虽然我明白 to_a 的意思是“我可以变成一个数组”,而 to_ar
我正在尝试解密一组用于数据库迁移的密码。我有一些旧的 Rails 代码(实际上是一个 Runner 脚本)可以很好地解密它们。但是将相同的代码放入 Rake 任务会导致任务失败,并显示...未定义的方
是否有我们在已经是数组的对象上调用 Array.to_a 和 Array.to_ary 的用例? 如果不是,为什么这些方法存在于 Array 类中? 最佳答案 Are there any use ca
我知道eql? Hashes 使用它来查看对象是否与键* 匹配,而您匹配 def ==(rb) 如果您想支持 == 运算符,但哈希不使用 == 一定有充分的理由。这是为什么?你什么时候会有 == 和
这是 MRI 中的错误还是对此行为有很好的解释? def pmap(enum) return to_enum(:pmap, enum) unless block_given? enum.map
我在 IRB 中玩耍,发现: ("A".."Z").to_a(当然)返回: => ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L"
我正在学习 Ruby,我看到了一些让我有点困惑的方法,特别是 to_s 与 to_str(同样,to_i /to_int, to_a/to_ary, & to_h/to_hash ).我读到的内容解释
我是一名优秀的程序员,十分优秀!