Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Ruby:使用字符串变量调用数组元素集不起作用_Arrays_Ruby_String_Hash - Fatal编程技术网

Arrays Ruby:使用字符串变量调用数组元素集不起作用

Arrays Ruby:使用字符串变量调用数组元素集不起作用,arrays,ruby,string,hash,Arrays,Ruby,String,Hash,我试图在下面的示例中调用一组元素 session_times: { thursday: ["10:20am", "12:30pm", "6:40pm"], friday: ["10:20am", "12:30pm", "6:40pm"], saturday: ["10:20am", "12:30pm", "6:00pm"], sunday: ["10:20am", "12:30pm", "6:30pm"] } 我尝试了以下功能 days_all = movi

我试图在下面的示例中调用一组元素

session_times: {
    thursday: ["10:20am", "12:30pm", "6:40pm"],
    friday: ["10:20am", "12:30pm", "6:40pm"],
    saturday: ["10:20am", "12:30pm", "6:00pm"],
    sunday: ["10:20am", "12:30pm", "6:30pm"]
  }
我尝试了以下功能

days_all = movie[:session_times]
string = ':' + 'thursday'
var1 = days_all[:thursday]
var2 = days_all["#{string}"]
var3 = days_all[string]
变量var1的结果非常好,但我不明白为什么var2或var3不能得到我的结果,它应该是相同的,同一个变量叫做right


非常感谢您的帮助:

不,符号和字符串之间有区别,它们并不总是可以互换的。符号与以冒号开头的字符串不同,冒号仍然是字符串。使用key:val散列语法时,键是符号;key=>val将是一个字符串键

其中任何一项都会起作用:

string = "thursday" # don't put the colon in here
days_all[:"#{string}"]
days_all[string.to_sym]
days_all["#{string}".to_sym]
如果您安装gem-activesupport,然后需要active\u支持/所有这些都是在rails中自动完成的,那么您需要使用什么密钥就不那么严格了:

days_all = days_all.with_indifferent_access
days_all["thursday"]
days_all[:thursday]
days_all.thursday

不,符号和字符串之间有区别,它们并不总是可以互换的。符号与以冒号开头的字符串不同,冒号仍然是字符串。使用key:val散列语法时,键是符号;key=>val将是一个字符串键

其中任何一项都会起作用:

string = "thursday" # don't put the colon in here
days_all[:"#{string}"]
days_all[string.to_sym]
days_all["#{string}".to_sym]
如果您安装gem-activesupport,然后需要active\u支持/所有这些都是在rails中自动完成的,那么您需要使用什么密钥就不那么严格了:

days_all = days_all.with_indifferent_access
days_all["thursday"]
days_all[:thursday]
days_all.thursday
对于Ruby:x表示符号,x表示字符串。符号是一个内部化的字符串,它的行为更像是一个任意常量,并且:x的每个实例彼此相同,它们实际上是同一个对象

对于字符串,情况并非如此,每个字符串可能不同,并且通常占用不同的内存块。这就是为什么在散列中看到用于键的符号,否则它们的重复将是浪费

您可以通过以下任一方式引用您的结构:

days_all[:thursday] # With a plain symbol
days_all["thursday".to_sym] # With a converted string
days_all[:"thursday"] # With a long-form symbol
另一件需要注意的事情是,如果可以避免的话,您可能不想坚持使用这种数据结构。这不是机器可读的,像:星期四这样的名字完全是随意的。最好使用一致的索引,如0表示星期天,1表示星期一等。这样,可以使用类似的函数在常规数组中查找内容

同样的情况也适用于人工标注的时间,比如10:30pm,其中1350表示22小时加30分钟,如果你不介意间隔之间的间隙,甚至2230。这些很容易比较:1130与Ruby:x表示符号,x表示字符串。符号是一个内部化的字符串,它的行为更像是一个任意常量,并且:x的每个实例彼此相同,它们实际上是同一个对象

对于字符串,情况并非如此,每个字符串可能不同,并且通常占用不同的内存块。这就是为什么在散列中看到用于键的符号,否则它们的重复将是浪费

您可以通过以下任一方式引用您的结构:

days_all[:thursday] # With a plain symbol
days_all["thursday".to_sym] # With a converted string
days_all[:"thursday"] # With a long-form symbol
另一件需要注意的事情是,如果可以避免的话,您可能不想坚持使用这种数据结构。这不是机器可读的,像:星期四这样的名字完全是随意的。最好使用一致的索引,如0表示星期天,1表示星期一等。这样,可以使用类似的函数在常规数组中查找内容


同样的情况也适用于人工标注的时间,比如10:30pm,其中1350表示22小时加30分钟,如果你不介意间隔之间的间隙,甚至2230。这些很容易比较:1130做了这件事的感谢:很抱歉回复太晚。做了这件事的感谢:很抱歉回复太晚