Ruby on rails 我有字符串,我必须把它转换成散列,就像2号一样
这是我的密码:Ruby on rails 我有字符串,我必须把它转换成散列,就像2号一样,ruby-on-rails,Ruby On Rails,这是我的密码: 1. "special_filter,|filter_str,(&(a=1)(c=11)(p=c=11,o=m,d=4))" 2.{ "a" =>"1", "c" => "11" , "p" => "c=11,o=m,d=4"} 逐行: 第1行:设置变量string和起始字符串 string=“特殊过滤器,|过滤器”(&(a=1)(c=11)(p=c=11,o=m,d=4))” 第2行:设置一个变量hash,并填充一个空hash hash={}
1. "special_filter,|filter_str,(&(a=1)(c=11)(p=c=11,o=m,d=4))"
2.{ "a" =>"1", "c" => "11" , "p" => "c=11,o=m,d=4"}
逐行:
第1行:设置变量string和起始字符串
string=“特殊过滤器,|过滤器”(&(a=1)(c=11)(p=c=11,o=m,d=4))”
第2行:设置一个变量hash,并填充一个空hash
hash={}
第3行:
- 剪切与此regexp匹配的字符串部分
string.slice(/\(&.*\)/)=>“(&(a=1)(c=11)(p=c=11,o=m,d=4))”
regexp以正斜杠(/regexp转到此处/)结尾。
括号在正则表达式中有特殊含义,因此必须用反斜杠转义。
&与字符串中的匹配。
在正则表达式中,一个。表示任何字符。
*表示前一个字符的“无”到“无限”。
所以这个正则表达式匹配(&)和(&fjalsdkfj)
- 用右括号拆分字符串
string.slice(/\(&.*\)/).split(“)”=>[(&(a=1)”,“(c=11)”,“(p=c=11,o=m,d=4”]
- 然后遍历结果数组
string.slice(/\(&.*\)/).split(“)”)。每个都不匹配
第4行:
- 进行迭代并从中删除不需要的字符
match.tr(“(&“,”)
- 使用第一个
符号将其拆分一次=
match.tr(“(&“,”).split(“=”,2)
- 使用2值数组作为散列上的键和值
match.tr(“(&“,”).split(“=”,2)。每个_片(2){键,值|散列[key]=value}
逐行:
第1行:设置变量string和起始字符串
string=“特殊过滤器,|过滤器”(&(a=1)(c=11)(p=c=11,o=m,d=4))”
第2行:设置一个变量hash,并填充一个空hash
hash={}
第3行:
- 剪切与此regexp匹配的字符串部分
string.slice(/\(&.*\)/)=>“(&(a=1)(c=11)(p=c=11,o=m,d=4))”
regexp以正斜杠(/regexp转到此处/)结尾。
括号在正则表达式中有特殊含义,因此必须用反斜杠转义。
&与字符串中的匹配。
在正则表达式中,a.表示任何字符。
*表示前一个字符的“无”到“无限”。
所以这个正则表达式匹配(&)和(&fjalsdkfj)
- 用右括号拆分字符串
string.slice(/\(&.*\)/).split(“)”=>[(&(a=1)”,“(c=11)”,“(p=c=11,o=m,d=4”]
- 然后遍历结果数组
string.slice(/\(&.*\)/).split(“)”)。每个都不匹配
第4行:
- 进行迭代并从中删除不需要的字符
match.tr(“(&“,”)
- 使用第一个
符号将其拆分一次=
match.tr(“(&“,”).split(“=”,2)
- 使用2值数组作为散列上的键和值
match.tr(“(&“,”).split(“=”,2)。每个_片(2){键,值{散列[key]=value}
我尝试这样做
Hash[*string[/\&.*/].tr("&(","").split(")").map{|i| i.split("=",2)}.flatten]
从@Conner的解决方案中获得的一些想法;)
谢谢@corner,我知道了一些以前从未使用过的函数。我尝试了一下
Hash[*string[/\&.*/].tr("&(","").split(")").map{|i| i.split("=",2)}.flatten]
从@Conner的解决方案中获得的一些想法;)
谢谢@corner我能知道一些我以前从未使用过的函数。谢谢,还有一件事是字符串将根据条件而变化,如果我的字符串是“a=1”或“c=c=1,o=m,d=4”,那么我如何将其转换为哈希。我不确定你在问什么。我的字符串将是(a=1)或(c=c=1,o=m,d=4)我如何将其转换为类似{“a”=>“1”的哈希还有{“c”=>“c=1,o=m,d=4”}我刚刚给你写了一本书,解释了如何做。看最后一行并修改它。
string.tr(“()”,”).split(“=”,2)。每个片(2){| x,y | hash[x]=y}
谢谢,如果我的字符串是“a=1”或“c=1,o=m,d=4”,字符串将根据情况而有所不同我的字符串将是(a=1)或(c=c=1,o=m,d=4)我怎么能把它转换成像{“a=”>“1”}和{“c=”>“c=1,o=m,d=4”}这样的散列呢?我刚刚给你写了一本书,解释了怎么做。看最后一行并修改它。string.tr(“,”)。split(“,”)。split(=”,2)。每片(2){x,y=x}