Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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
ruby中的数据结构是否只存储唯一的元素?_Ruby_Data Structures_Set - Fatal编程技术网

ruby中的数据结构是否只存储唯一的元素?

ruby中的数据结构是否只存储唯一的元素?,ruby,data-structures,set,Ruby,Data Structures,Set,我想要一个Ruby中的数据结构,它只存储一次字符串,下次我尝试将其放入时会拒绝它(类似于“SET”)。 实现需要最高效(例如,比数组中的线性搜索更好) 我也尝试过使用散列,但是多个具有相同值的字符串(这些字符串是我从对一些现有字符串的切片操作中获得的)进入了散列,似乎正在为它们计算不同的散列值 什么是最好、最有效的出路?我不想使用红宝石。我正在从一个在线法官那里研究一个谜题解决方案,我只能提交我自己的代码 以下是我编写的代码片段: for string in @string_store do

我想要一个Ruby中的数据结构,它只存储一次字符串,下次我尝试将其放入时会拒绝它(类似于“SET”)。 实现需要最高效(例如,比数组中的线性搜索更好)

我也尝试过使用散列,但是多个具有相同值的字符串(这些字符串是我从对一些现有字符串的切片操作中获得的)进入了散列,似乎正在为它们计算不同的散列值

什么是最好、最有效的出路?我不想使用红宝石。我正在从一个在线法官那里研究一个谜题解决方案,我只能提交我自己的代码

以下是我编写的代码片段:

for string in @string_store do
  for c in 0...string.length
    index_to_sum=0
    while c+index_to_sum<string.length do
      substring=string[c..(c+index_to_sum)]         
      unless @hash_store[substring]=='X'
        @hash_store[substring]='X'
      end
      index_to_sum+=1
    end
  end
end   
@string\u store do中字符串的

对于0…string.length中的c
索引到总和=0
而c+指数与a之和如何

require'set'
s1=Set.new[1,2]#->#
s2=[1,2]。到#->#
s1==s2#->真
s1.添加(“foo”)#->#
s1.合并([2,6])#->#
s1.子集?s2#->错误
s2.1子集?s1#->正确
虽然它使用了一个
require
,但Ruby Set是Ruby标准库的一部分,因此它应该完全可以用于您提交的代码中(

a:)

require'set'
s1=Set.new[1,2]#->#
s2=[1,2]。到#->#
s1==s2#->真
s1.添加(“foo”)#->#
s1.合并([2,6])#->#
s1.子集?s2#->错误
s2.1子集?s1#->正确

尽管它使用了
require
,但Ruby Set是Ruby标准库的一部分,因此它应该完全可以用于您的代码提交

当然,macek的解决方案是可行的,但哈希肯定也可以。在本机不支持集合的语言中,使用哈希存储唯一列表是一种常见的习惯用法。您能否提供一个小代码示例,用重复字符串再现问题?我怀疑,当您转换为使用集合时,您可能会遇到相同的问题。

当然,macek的解决方案是可行的,但哈希肯定也可以。在本机不支持集合的语言中,使用哈希存储唯一列表是一种常见的习惯用法。您能否提供一个小代码示例,用重复字符串再现问题?我怀疑当您转换为使用集合时,您可能会遇到相同的问题。

喜欢死亡笔记图片,顺便说一下:)您确定“但是多个具有相同值的字符串(这些字符串是我从对某些现有字符串的切片操作中获得的)会进入哈希”吗?喜欢死亡笔记图片,顺便说一下:)你确定“但是多个具有相同值的字符串(这些字符串是我从对一些现有字符串的切片操作中获得的)进入哈希”吗@Myth17根据上述代码,如果调用
@hash\u store.keys
,您应该会得到您的唯一列表。您是说如果调用它,您会看到重复的键吗?是的,输出为-->aa aab aab ab b aac aac ac cc@Myth17你确定这不是空白问题吗?像“aab”“aab”之类的?这很奇怪。@Myth17鉴于上述代码,如果您调用
@hash\u store.keys
您应该会得到您的唯一列表。您是说如果调用它,您会看到重复的键吗?是的,输出为-->aa aab aab ab b aac aac ac cc@Myth17你确定这不是空白问题吗?像“aab”“aab”之类的?这很奇怪。即使有一套DS,我也面临同样的问题|即使有一套DS,我也面临同样的问题:|
require 'set'
s1 = Set.new [1, 2]                   # -> #<Set: {1, 2}>
s2 = [1, 2].to_set                    # -> #<Set: {1, 2}>
s1 == s2                              # -> true
s1.add("foo")                         # -> #<Set: {1, 2, "foo"}>
s1.merge([2, 6])                      # -> #<Set: {6, 1, 2, "foo"}>
s1.subset? s2                         # -> false
s2.subset? s1                         # -> true