选择数组

时间:2015-11-25 16:57:51

标签: arrays ruby

我有一个数组

["Hello, how are you", "Hello, I'm well", "What is your name"]

我想选择前三个字符相同的所有元素。但是,我事先并不知道这些元素是什么。

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

3 个答案:

答案 0 :(得分:4)

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

def update_cell(x, y):
    try:
        if hiddenfield[x][y] != 'M':
            hiddenfield[x][y] += 1
    except IndexError:
        pass

for i in range(0, len(hiddenfield)):
    for j in range(0, len(hiddenfield)):
        if hiddenfield[i][j] == 'M':
            update_cell(i - 1, j - 1)
            update_cell(i - 1, j)
            update_cell(i - 1, j + 1)
            update_cell(i, j - 1)
            update_cell(i, j + 1)
            update_cell(i + 1, j - 1)
            update_cell(i + 1, j)
            update_cell(i + 1, j + 1)

答案 1 :(得分:1)

我认为你的问题需要澄清 - 如果你有一个数组["hello", "hello, what is your name?", "goodbye", "goodbye, user"]怎么办?

在这种情况下,您可以选择2个可能/互斥的组。我会通过避免#select all:

来解决这个问题

创建一个空的result哈希,默认返回一个新的空数组。 - 迭代数组中的每个元素,将其按前三个数字的键推送到数组中。 - 应用您选择的逻辑来返回哈希或简单地返回您想要的键(值)(最大值,大于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"]}

答案 2 :(得分:1)

以下是一种方法:

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

节目输出:

{"Hel"=>["Hello, how are you", "Hello, I'm well"], "Wha"=>["What is your name"]}