我有一个二维数组
array = [["a first sentence of 6 words","Reference 1"],["another sentence that may be longer with 9 words","Reference 2"]]
我想删除第一个元素包含少于7个字的所有条目,因此请获取以下数组
[["another sentence that may be longer with 9 words","Reference 2"]]
我尝试过各种各样的事情,包括
array.reject { |a| a.first.split.size < 7 }
但是我收到了错误
undefined method `split' for 0:Fixnum
我也试过
array.reject { |a| a[0].split.size < 7 }
和
array.reject { |a| a.first.size < 7 }
但它似乎创建了一个无限循环,页面继续加载没有结果。任何人都可以帮助我获得正确的语法吗?
答案 0 :(得分:0)
看起来数组中的第一个元素之一是Fixnum。在Fixnum上没有定义split,因此出错。
如果第一项的to_s.split小于7,则拒绝。
array.reject { |a| a.first.to_s.split.size < 7 }
答案 1 :(得分:0)
您可以通过计算空格而不是创建中间人Array
来提高效率。您还可以使用并行分配使其更具可读性。 e.g。
arr = [
["a first sentence of 6 words","Reference 1"],
["another sentence that may be longer with 9 words","Reference 2"]
]
# split with no argument will separate on space and create an Array
# this means we can use `String#count` and look for the number of spaces that would
# create 7 words (e.g. 6 spaces)
# `#strip` will get rid of leading an trailing spaces so that `#count` will work like `#split`
arr.reject {|sentence,_ref| sentence.to_s.strip.count(' ') < 6 }