Arrays 选择数组中前三个字符相同的所有元素

Arrays 选择数组中前三个字符相同的所有元素,arrays,ruby,Arrays,Ruby,我有一个数组 ["Hello, how are you", "Hello, I'm well", "What is your name"] 我想选择前三个字符相同的所有元素。然而,我不知道之前的元素是什么 编辑:重新思考这个问题。我真的在寻找一种方法来对具有前x个公共字符的元素进行分组。它们可以是新的数组,也可以是相同的数组,但是元素的排序是正确的。我想你的问题需要澄清-如果你有一个数组怎么办[你好,你好,你叫什么名字?再见,再见,用户] 在这种情况下,您将有两个可能的/互斥的组可供选择。我将

我有一个数组

["Hello, how are you", "Hello, I'm well", "What is your name"]
我想选择前三个字符相同的所有元素。然而,我不知道之前的元素是什么


编辑:重新思考这个问题。我真的在寻找一种方法来对具有前x个公共字符的元素进行分组。它们可以是新的数组,也可以是相同的数组,但是元素的排序是正确的。

我想你的问题需要澄清-如果你有一个数组怎么办[你好,你好,你叫什么名字?再见,再见,用户]

在这种情况下,您将有两个可能的/互斥的组可供选择。我将通过避免一起选择来解决此问题:

-创建一个空结果散列,默认返回一个新的空数组。 -迭代数组中的每个元素,将其按在数组前三位的键上。 -应用您选择的逻辑返回哈希值,或者只返回您想要的最大值、大于1的键/值,等等

def first_three_chars_match(strings)
  result = Hash.new{ |hash,key| hash[key] = Array.new }
  strings.each do |string|
    key = string.slice(0,3)
    result[key] << string
  end
  result
end

first_three_chars_match(["hello", "hello, what is your name?", "goodbye", "goodbye, user"])
=> {"hel"=>["hello", "hello, what is your name?"], "goo"=>["goodbye", "goodbye, user"]}

我认为你的问题需要澄清-如果你有一个数组[你好,你好,你叫什么名字?,再见,再见,用户]

在这种情况下,您将有两个可能的/互斥的组可供选择。我将通过避免一起选择来解决此问题:

-创建一个空结果散列,默认返回一个新的空数组。 -迭代数组中的每个元素,将其按在数组前三位的键上。 -应用您选择的逻辑返回哈希值,或者只返回您想要的最大值、大于1的键/值,等等

def first_three_chars_match(strings)
  result = Hash.new{ |hash,key| hash[key] = Array.new }
  strings.each do |string|
    key = string.slice(0,3)
    result[key] << string
  end
  result
end

first_three_chars_match(["hello", "hello, what is your name?", "goodbye", "goodbye, user"])
=> {"hel"=>["hello", "hello, what is your name?"], "goo"=>["goodbye", "goodbye, user"]}

有一种方法可以做到这一点:

ary = ["Hello, how are you", "Hello, I'm well", "What is your name"]
matches = ary.inject({}) do |hash, str| 
  chars = str[0,3]; 
  hash[chars] = (hash[chars] || []) << str; 
  hash 
end
p matches

有一种方法可以做到这一点:

ary = ["Hello, how are you", "Hello, I'm well", "What is your name"]
matches = ary.inject({}) do |hash, str| 
  chars = str[0,3]; 
  hash[chars] = (hash[chars] || []) << str; 
  hash 
end
p matches

OP想要什么完全不清楚,但如果此时其他答案给出的是OP想要的,那么这里有一个更简单的方法:

a = ["Hello, how are you", "Hello, I'm well", "What is your name"]
a.group_by{|e| e[0, 3]}

OP想要什么完全不清楚,但如果此时其他答案给出的是OP想要的,那么这里有一个更简单的方法:

a = ["Hello, how are you", "Hello, I'm well", "What is your name"]
a.group_by{|e| e[0, 3]}

你是如何找到这3个角色的?你能在数组中的所有元素上运行一个正则表达式过滤器吗?你期望的输出是什么?从你的问题中不清楚预期的输出将是新的数组,只有在元素具有共同的前3个字符时才有元素[aaax,aaay,bbbz,bbbw]的输出是什么?我认为问题很清楚,他想找到匹配的模式。。。模式是数组的元素以相同的三个字符开始,如何获得要查找的3个字符?你能在数组中的所有元素上运行一个正则表达式过滤器吗?你期望的输出是什么?从你的问题中不清楚预期的输出将是新的数组,只有在元素具有共同的前3个字符时才有元素[aaax,aaay,bbbz,bbbw]的输出是什么?我认为问题很清楚,他想找到匹配的模式。。。模式是数组的元素以相同的三个字符开始,因为它们都是相似的,但这是最好的。谢谢我对每个人的答案都投了赞成票,因为他们都很相似,但这是最好的。谢谢