我有两个数组
main_array = [[0,[1,4,5]], [1,[4,6,8]], [2,[5,6,7,8]], [3,[9,8]], [4,[7,2]]]
other_array = [[1,4,5],[9,8]]
我想要做的是删除main_array
中的这些元素,如果它可以在other_array
中找到。 (意思是我将留下[[1,[4,6,8]], [2,[5,6,7,8]],[4,[7,2]]]
)所以我做了以下事情:
other_array.each { |x|
for i in 0..main_array.length-1
main_array.delete(x)
}
它不起作用。关于如何处理这个问题的任何线索?
答案 0 :(得分:2)
main_array.reject { |_,a| other_array.include?(a) }
#=> [[1,[4,6,8]], [2,[5,6,7,8]], [4,[7,2]]]
答案 1 :(得分:0)
你可以使用Enumerable#reject(这是一个包含在Ruby中几乎所有集合中的模块,比如Arrays,Hashes,Sets等),它会根据某些条件返回带有删除元素的新数组:
item
此处main_array
是item
中的每个项目。你也可以打开"打开"如果您想单独控制其元素,则需要main_array.reject { |(key, val)| other_array.include? val }
:
public static void removeLine(String ans, String file) throws IOException {
boolean foundLine = false;
try (BufferedReader br = Files.newBufferedReader(Paths.get(file));
BufferedWriter bw = Files.newBufferedWriter(Paths.get(file + ".tmp"))) {
String line;
while ((line = br.readLine()) != null) {
String[] tokens = line.split("::", 2);
if (tokens[0].equals(ans)) {
foundLine = true;
} else {
if (foundLine) {
bw.write((Integer.parseInt(tokens[0]) - 1) + "::" + tokens[1]);
} else {
bw.write(line);
}
bw.newLine();
}
}
}
Files.move(Paths.get(file + ".tmp"), Paths.get(file), StandardCopyOption.REPLACE_EXISTING);
}
我建议你去查看上面的链接,那边还有很多有趣的东西。