a=b&c=d&e=f&g=h
如何将其提取到[a,b,c,d,e,f,g,h]
我知道我可以使用split,但看起来它只能使用一个分隔符。
或如何转换为哈希?
答案 0 :(得分:5)
拆分FTW(即最直接,最简单的方法):
irb(main):001:0> s = "a=b&c=d&e=f&g=h"
=> "a=b&c=d&e=f&g=h"
irb(main):002:0> s.split(/[=&]/)
=> ["a", "b", "c", "d", "e", "f", "g", "h"]
滥用Ruby的其他有趣方式:
irb(main):001:0> s = "a=b&c=d&e=f&g=h"
=> "a=b&c=d&e=f&g=h"
irb(main):002:0> s.split('=').collect{|x| x.split('&')}.flatten
=> ["a", "b", "c", "d", "e", "f", "g", "h"]
irb(main):003:0> ['=','&'].inject(s) {|t, n| t.split(n).join()}.split('')
=> ["a", "b", "c", "d", "e", "f", "g", "h"]
同时检查Cary和GamesBrainiac的答案以获得更多选择:)
答案 1 :(得分:1)
您可以使用以下内容轻松制作哈希:
myHash = {}
strSplit = "a=b&c=d&e=f&g=h".split("&")
for pair in strSplit
keyValueSplit = pair.split("=")
myHash[keyValueSplit[0]] = keyValueSplit[1]
end
myHash
最终会看起来像{"a"=>"b", "c"=>"d", "e"=>"f", "g"=>"h"}
答案 2 :(得分:1)
@ Mirea的答案是最好的,但这是另一个:
s = "a=b&c=d&e=f&g=h"
s.scan /[a-z]/
#=> ["a", "b", "c", "d", "e", "f", "g", "h"]
当然可以根据需要调整正则表达式。例如:
"123a=b&c=d&E=f&g=h".scan /[A-Za-z0-9]/
#=> ["1", "2", "3", "a", "b", "c", "d", "E", "f", "g", "h"]
或
"1-2-3a=$b&c=d&e=f&g=h".scan /[^=&]/
#=> ["1", "-", "2", "-", "3", "a", "$", "b", "c", "d", "e", "f", "g", "h"]
等等。
如果需要字符串,只需将+
附加到字符类:
"123a=b&ccc=d&E=f&gg=h".scan /[A-Za-z0-9]+/
#=> ["123a", "b", "ccc", "d", "E", "f", "gg", "h"]
如果字符串具有示例中显示的交替形式,则这些也可以起作用:
(0..s.size).step(2).map { |i| s[i] }
#=> ["a", "b", "c", "d", "e", "f", "g", "h"]
s.each_char.each_slice(2).map(&:first)
#=> ["a", "b", "c", "d", "e", "f", "g", "h"]
答案 3 :(得分:0)
我会使用#include<stdio.h>
#include<conio.h>
void main()
{
int i;
int number=2;
int total=1;
int power=64;
int totalSum=1;
for(i=1;i<=power;)
{
total=total*number;
totalSum=totalSum+total;
i++;
}
printf("%d\n",total);
printf("Sum=%d",totalSum);
}
。
gsub
所以,我们在这里做的是用一个空格替换所有irb(main):001:0> s = "a=b&c=d&e=f&g=h"
=> "a=b&c=d&e=f&g=h"
irb(main):004:0> s.gsub(/[\=\&]/, " ").split()
=> ["a", "b", "c", "d", "e", "f", "g", "h"]
和=
。然后,我们只需&
字符串。