2011-05-10 113 views
0

我是Ruby的新手,因为现在可能大家都知道了:) 我对某个服务有一个查询,我找回了一个数组。当我运行这段代码解析Ruby数组

@query_result.each do |test| 
    puts test 
end 

我得到的正是这种输出

["names", ["s", "label"]] ["values", [["<http://www.udfr.org/test-instance#PDF-1>", "\"Acrobat PDF 1.0 - Portable Document Format\"^^<http://www.w3.org/2001/XMLSchema#string>"], ["<http://www.udfr.org/test-instance#BroadcastWave>", "\"Broadcast WAVE\"^^<http://www.w3.org/2001/XMLSchema#string>"], ["<http://www.udfr.org/test-instance#PNG-1>", "\"Portable Network Graphics\"^^<http://www.w3.org/2001/XMLSchema#string>"], ["<http://www.udfr.org/test-instance#PNG-1-1>", "\"Portable Network Graphics\"^^<http://www.w3.org/2001/XMLSchema#string>"], ["<http://www.udfr.org/test-instance#GIF-1989a>", "\"Graphics Interchange Format\"^^<http://www.w3.org/2001/XMLSchema#string>"], ["<http://www.udfr.org/test-instance#TIFF-4>", "\"Tagged Image File Format\"^^<http://www.w3.org/2001/XMLSchema#string>"], ["<http://www.udfr.org/test-instance#TIFF-6>", "\"Tagged Image File Format\"^^<http://www.w3.org/2001/XMLSchema#string>"], ["<http://www.udfr.org/test-instance#BroadcastWave-1>", "\"Broadcast WAVE\"^^<http://www.w3.org/2001/XMLSchema#string>"], ["<http://www.udfr.org/test-instance#PNG-1-2>", "\"Portable Network Graphics\"^^<http://www.w3.org/2001/XMLSchema#string>"], ["<http://www.udfr.org/test-instance#TIFF-3>", "\"Tagged Image File Format\"^^<http://www.w3.org/2001/XMLSchema#string>"], ["<http://www.udfr.org/test-instance#TIFF-5>", "\"Tagged Image File Format\"^^<http://www.w3.org/2001/XMLSchema#string>"], ["<http://www.udfr.org/test-instance#AVI-Generic>", "\"Audio/Video Interleaved Format\"^^<http://www.w3.org/2001/XMLSchema#string>"], ["<http://www.udfr.org/test-instance#GIF-1987a>", "\"Graphics Interchange Format\"^^<http://www.w3.org/2001/XMLSchema#string>"], ["<http://www.udfr.org/test-instance#WaveformAudio>", "\"Waveform Audio\"^^<http://www.w3.org/2001/XMLSchema#string>"], ["<http://www.udfr.org/test-instance#BroadcastWave-1>", "\"Broadcast WAVE\"^^<http://www.w3.org/2001/XMLSchema#string>"], ["<http://www.udfr.org/test-instance#BroadcastWave>", "\"Broadcast WAVE\"^^<http://www.w3.org/2001/XMLSchema#string>"]]]

我知道它是神秘的,但基本上我只需要在这些提取值:

names 
s 
label 
values 

从数组中获取列的实际值的代码是什么?

+1

你只是试图获得这个数组的前四个值,或者你是否想要做其他事情? – dogenpunk 2011-05-10 18:22:04

+0

你必须提及什么是@query_result,你想要什么。 – shajin 2011-05-10 18:29:53

+0

@dogenpunk不,这些不是4个值。这些是指标。我有一个名为“label”的列和一个名为“s”的列 - 我只是试图为它们提取值。 – GeekedOut 2011-05-10 18:31:19

回答

4

@query_result具有结构:

[["names", ["s", "label"]], ["values", array]] 

其中array包括对。我没有看到字面字符串"names","s","label""values"有用。你可能想要拿出array

如果你

@query_result[1] 

这会给你的@query_result第二个元素,这是

["values", array] 

如果进一步做

@query_result[1][1] 

这会给你的array部分:

[ 
    [ 
    "http://www.udfr.org/test-instance#PDF-1", 
    "\"Acrobat PDF 1.0 - Portable Document Format\"^^http://www.w3.org/2001/XMLSchema#string" 
    ], 
    [ 
    "http://www.udfr.org/test-instance#BroadcastWave", 
    "\"Broadcast WAVE\"^^http://www.w3.org/2001/XMLSchema#string" 
    ], 

    ... 

] 
+0

是的,[1,1]做到了。它与其他语言不同,你必须不断增加循环的计数器。 put是否取出当前的数组元素,这就是为什么[1,1]总是指向当前值? – Genadinik 2011-05-10 19:12:25

+0

这不是'[1,1]'。这是'[1] [1]'。它意味着原始数组第二项的第二项(请注意索引从0开始)。 – sawa 2011-05-10 19:13:09

+0

Ruby的'each'遍历数组中的元素;你不必关心柜台。这个概念被称为内部迭代器,是红宝石的一个特性。 'puts'为当前元素添加一行结束并打印它。 – sawa 2011-05-10 19:15:20

1

是的,这是神秘的:)但是,如果这4个值总是数组的第4,你可以这样做:现在

@query_result[0..3].each do |test| 
    puts test 
end 
+0

我认为那些前4个只是索引名称。 – GeekedOut 2011-05-10 18:45:05

+0

我更新了结果集,希望对我的问题更有意义。 – GeekedOut 2011-05-10 18:46:52

+0

@GeekedOut你想要对这些数据做什么? – xinit 2011-05-10 18:59:26

1

测试与当前读取的数据阵列。您可以使用

test[index] 

来获取您的数据。

puts test[0] 

应该打印[“s”,“label”]。

由于第二阵列是锯齿状,您可以使用

puts test[1][index] 

得到的值的指数为基础的0项。

+0

其实这给了一个错误:“不能将字符串转换为整数” – Genadinik 2011-05-10 19:08:24

+0

啊,这是一个实际的数组。为你更新它。 – 2011-05-10 19:09:33