我目前正在尝试将数组的每个元素与其他元素进行比较(在Ruby中)。这些元素是类的对象。我需要找到它们之间的相似之处。我的想法是遍历原始数组并在此循环中创建一个包含其他元素(不是外部循环之一)的新数组,然后遍历第二个数组并将每个项目与每个循环外部的项目进行比较。
这是一些伪代码:
originalArray.each{
|origElement|
tempArray = createNewArray from original array without origElement
tempArray.each{
|differentElement|
Compare origElement with differentElement
}
}
如何创建tempArray?
答案 0 :(得分:2)
我认为您应该使用Array#permutation来实现此目标
original_array.permutation(2) { |elements| Compare elements[0] with elements[1] }
答案 1 :(得分:1)
首先,我想说bjhaid的答案是美丽的,对于你的具体实例,它应该是应该使用的。
但是,我想提供一个更一般的答案,回答你问的直接问题:“我怎样才能创建那个tempArray?”
如果您想删除原始数组中元素相等的所有值,您可以这样做:
tempArray = originalArray - [origElement]
但是,如果您只想删除该元素,则可以执行以下操作:
originalArray.each_with_index {
|origElement, index|
tempArray = originalArray.dup
tempArray.delete_at(index)
tempArray.each{
|differentElement|
Compare origElement with differentElement
}
}
另外,关于造型的说明。您可能希望对所有方法/变量使用下划线而不是CamelCase。在Ruby社区中,CamelCase通常保留用于类/模块名称。您可能还希望将“管道输入”变量(称为块参数)保留在与块开头相同的行上。它当然不是必需的,但它是Ruby社区中几乎普遍的惯例。
对于典型的Ruby开发人员来说,这段代码片段会更加熟悉和可读:
original_array.each_with_index do |orig_element, index|
temp_array = original_array.dup
temp_array.delete_at(index)
temp_array.each do |different_element|
Compare orig_element with different_element
end
end