我有两个这样的数组:[[word],[number of occurence] , ... ]
Table 1 : [[["web"], 9], [["paris"], 8], [["html5"], 6], [["css3"], 6] ... ]
Table 2 : [[["web"], 2], [["paris"], 3], [["word"], 5], [["class"], 6] ... ]
我想将表2与表1进行比较,仅显示不在表2上的单词。
通过这个例子,我会得到:
Table 2 doesn't have html5, css3
Ruby有没有可以做到的宝石?
答案 0 :(得分:4)
这里使用的结构非常不规则,但将其重新映射到更容易使用的东西并不困难:
def hashify(list)
list.map do |(word), count|
[ word, count ]
end.to_h
end
|(word), count|
声明从嵌套数组中提取出来,简化了代码。
鉴于样本数据,它的工作原理如下:
table1 = [[["web"], 9], [["paris"], 8], [["html5"], 6], [["css3"], 6] ]
table2 = [[["web"], 2], [["paris"], 3], [["word"], 5], [["class"], 6] ]
hashify(table1)
# => {"web"=>9, "paris"=>8, "html5"=>6, "css3"=>6}
然后你可以用它来计算差异:
hashify(table1).keys - hashify(table2).keys
# => ["html5", "css3"]
答案 1 :(得分:3)
不需要任何宝石。 Array difference工作得很好,但你需要先提取有趣的单词:
var duplduplicateItems cates = results.GroupBy(r => r ).SelectMany(x => x.Skip(1));
使用哈希值会更容易:
table1 = [[["web"], 9], [["paris"], 8], [["html5"], 6], [["css3"], 6]]
table2 = [[["web"], 2], [["paris"], 3], [["word"], 5], [["class"], 6]]
def extract_words(table)
table.map{|sub_array| sub_array.flatten.first }
end
puts extract_words(table1) - extract_words(table2)
# html5
# css3
答案 2 :(得分:1)
我认为您不需要数字数据,因此我建议您解决问题的单行解决方案:
(table1.flatten - table2.flatten).reject {|elem| elem.is_a?(Integer)}
返回以下数组:
=> ["html5", "css3"]
答案 3 :(得分:1)
return (
<div style={styles.style.main}>
<h3 style={styles.style.header}>Vote for your favorite hack day idea</h3>
</div>
);