我有一个数组
["Hello, how are you", "Hello, I'm well", "What is your name"]
我想选择前三个字符相同的所有元素。但是,我事先并不知道这些元素是什么。
编辑:重新思考这个问题。我真的在寻找一种方法来对具有前x个共同字符的元素进行分组。它们可以是新数组或相同数组,但元素排序正确。
答案 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"]}