新手问题 怎么样最简方式,把一维数组变为二维

QueXuQ · 2013年11月18日 · 最后由 bhuztez 回复于 2013年11月20日 · 4908 次阅读

["a", "b", "c", "d"]变成[["a", 0], ["b", 1], ["c", 2], ["d", 3]]

我写了:

all = []
arra.each_with_index do |arr, index|
  new_arr = [arr, index]
  all << new_arr
end

觉得有更好的办法,挑战一下?

["a", "b", "c", "d"].each_with_index.map{ |v, i| [v, i] }
:s/\(\"\w\"\)/[\1, _ph_]_ph2_\r/g
:let i=0 | g/_ph_/s//\=i/ |let i+=1
:%s/_ph2_\n//g

#9 楼 @Alexander 这是神马浮云?这次真看不懂了,郁闷了

#7 楼 @luikore

直接 to_a 也行。

["a", "b", "c", "d"].each_with_index.to_a

#12 楼 @skandhas en, * 就是调用了 to_ary, enumerator 的 to_aryto_a 一样

@luikore * 是什么方法,很神奇。 (ruby-doc 上没有找到相关说明,输入*,没法搜索)

#14 楼 @zealinux

打散 (splat) 运算符,会调用对象的 to_ary 方法转换成数组

The Ruby Programming Language ch4s5, 注册个免费帐号可以看 safariflow 的: http://www.safariflow.com/library/view/The+Ruby+Programming+Language/9780596516178/ch04s05.html#id3274652

常用法:

array = [head, *tail]

head, *tail = array

def f head, *tail
  ...
end

lambda do |head, *tail|
  ...
end

# 嵌套展开
proc do |((head, *middle, tail), *middle, tail)|
  ...
end
    X ← 'a' 'b' 'c' 'd'
    ((⊖1,⍴X)⍴X) , ((⊖1,⍴X)⍴⍳⍴X)-1
a 0
b 1
c 2
d 3

#17 楼 @bhuztez

X ← 'a' 'b' 'c' 'd'
X , [1.5]((⍳ρX)-1)

#21 楼 @bhuztez 我知道了,tryapl 只接受 apl functional symbol rho 不接受 greek small letter rho

X ← "a" "b" "c" "d"
X , [1.5]((⍳⍴X)-1)

#22 楼 @luikore [1.5] 这是个什么东西

#23 楼 @bhuztez axis indicator http://en.wikipedia.org/wiki/APL_syntax_and_symbols#Operators_and_axis_indicator

0 < n < 1 上下结构 n = 1 左右结构 1 < n 转置后左右结构

#24 楼 @luikore 为什么是 5 ... 1 的结果也一样?

#25 楼 @bhuztez 1.234 也一样,比 1 大而且没到 2 就可以...

#28 楼 @luikore 我还在慢慢学 J,APL 这种输入太麻烦的还是以后再说了 ...

需要 登录 后方可回复, 如果你还没有账号请 注册新账号