Ruby on rails 在数组上执行的RubyonRails语句检查子元素字符串是否唯一
我有一个数组对象,在这个例子中,我们称它为Ruby on rails 在数组上执行的RubyonRails语句检查子元素字符串是否唯一,ruby-on-rails,arrays,ruby,ruby-on-rails-4,where,Ruby On Rails,Arrays,Ruby,Ruby On Rails 4,Where,我有一个数组对象,在这个例子中,我们称它为Diff。这些差异具有多个不完全相同的字段(old\u image、new\u image、url,等等)new\u image和old\u image在本例中都有字段,最重要的是一个名为image\u file\u name的字段 我想得到一个包含所有差异的数组,该数组具有唯一的old_image.image_file_名称,即任何差异都不应具有具有相同文件名的old_图像 我相信逻辑应该是这样的 unique_diffs = Array.new @d
Diff
。这些差异具有多个不完全相同的字段(old\u image
、new\u image
、url
,等等)new\u image
和old\u image
在本例中都有字段,最重要的是一个名为image\u file\u name
的字段
我想得到一个包含所有差异的数组,该数组具有唯一的old_image.image_file_名称,即任何差异都不应具有具有相同文件名的old_图像
我相信逻辑应该是这样的
unique_diffs = Array.new
@diff.build.diffs.each { |diff|
if diff.old_image.image_file_name != @diff.old_image.image_file_name
unique_diffs.push(diff)
end
}
或者类似的事情
@unique_diffs = @diff.build.diffs.map{|diff| diff.old_image.image_file_name}.uniq
任何帮助都将不胜感激。尝试以下方法:
Diff = Struct.new(:old_image)
Image = Struct.new(:image_file_name)
diffs = [
Diff.new(Image.new('name1')),
Diff.new(Image.new('name2')),
Diff.new(nil),
Diff.new(Image.new('name1')),
]
uniqs = diffs.select { |diff| diff.old_image }.uniq { |diff| diff.old_image.image_file_name }
p uniqs # prints Diff with name1 and Diff with name 2
唯一重要的一行是调用select
和uniq
的那一行
您需要使用只保留旧图像的差异,然后使用删除具有重复图像文件名的差异。尝试以下操作:
Diff = Struct.new(:old_image)
Image = Struct.new(:image_file_name)
diffs = [
Diff.new(Image.new('name1')),
Diff.new(Image.new('name2')),
Diff.new(nil),
Diff.new(Image.new('name1')),
]
uniqs = diffs.select { |diff| diff.old_image }.uniq { |diff| diff.old_image.image_file_name }
p uniqs # prints Diff with name1 and Diff with name 2
唯一重要的一行是调用select
和uniq
的那一行
您需要使用只保留带有旧图像的差异,然后使用删除带有重复图像文件名的差异。我最终使用了循环,我希望使用uniq函数使其更干净,但它似乎不起作用,它返回了所有的差异,而不是具有唯一旧图像文件名的差异
@diff.build.diffs.each { |diff|
if diff.old_image.image_file_name == @diff.old_image.image_file_name
# Logic went here
end
}
仍有改进的余地,但目前这将不得不这样做。我最终使用了循环,我希望通过uniq函数使它更干净,但它似乎不起作用,它返回了所有的差异,而不是具有唯一旧图像文件名的差异
@diff.build.diffs.each { |diff|
if diff.old_image.image_file_name == @diff.old_image.image_file_name
# Logic went here
end
}
仍有改进的余地,但目前还需要改进。它还给了我所有的差异,而不仅仅是具有唯一旧映像文件名的差异。它还给了我所有的差异,而不仅仅是具有唯一旧映像文件名的差异。要使uniq正常工作,请查看array.uniq的文档。您发现它使用了的“eql?”方法使uniq工作,只需查看array.uniq的文档。您发现它使用了