Arrays 如何删除具有特定数量元素的子阵列

Arrays 如何删除具有特定数量元素的子阵列,arrays,ruby,Arrays,Ruby,我有一个数组: arr = [["csb#"], ["gcp30", "hdd"], ["gcp30", "hdd", "30", "no"], ["spl#"]] 如何删除仅包含一个元素的子阵列,如[“csb”]?使用以下方法: 注意:这将通过删除仅包含1个元素的子数组来修改原始数组 > arr #=> [["gcp30", "hdd"], ["gcp30", "hdd", "30", "no"]] 如果只想获取包含多个元素的子数组: : 或: : >arr.reject{a

我有一个数组:

arr = [["csb#"], ["gcp30", "hdd"], ["gcp30", "hdd", "30", "no"], ["spl#"]]
如何删除仅包含一个元素的子阵列,如
[“csb”]

使用以下方法:

注意:这将通过删除仅包含1个元素的子数组来修改原始数组

> arr
#=> [["gcp30", "hdd"], ["gcp30", "hdd", "30", "no"]] 
如果只想获取包含多个元素的子数组:

:

或:

:

>arr.reject{a | a.size[[“gcp30”、“hdd”]、[“gcp30”、“hdd”、“30”、“否”]
使用以下方法:

注意:这将通过删除仅包含1个元素的子数组来修改原始数组

> arr
#=> [["gcp30", "hdd"], ["gcp30", "hdd", "30", "no"]] 
如果只想获取包含多个元素的子数组:

:

或:

:

>arr.reject{a | a.size[[“gcp30”、“hdd”]、[“gcp30”、“hdd”、“30”、“否”]
您也可以使用。使用
它将变异原始数组,否则将返回新数组:

arr =[["csb#"], ["gcp30", "hdd"], ["gcp30", "hdd", "30", "no"], ["spl#"]]
arr.reject {|e| e.length == 1 }
#=> [["gcp30", "hdd"], ["gcp30", "hdd", "30", "no"]]
arr.reject! {|e| e.length == 1 }
#=> [["gcp30", "hdd"], ["gcp30", "hdd", "30", "no"]]
arr
#=> [["gcp30", "hdd"], ["gcp30", "hdd", "30", "no"]]
,或
选择!
,也可用于相同的功能:

arr = [["csb#"], ["gcp30", "hdd"], ["gcp30", "hdd", "30", "no"], ["spl#"]]
#=> [["csb#"], ["gcp30", "hdd"], ["gcp30", "hdd", "30", "no"], ["spl#"]]
arr.select! {|e| e.length != 1 }
#=> [["gcp30", "hdd"], ["gcp30", "hdd", "30", "no"]]
您也可以使用。使用
时,它将变异原始数组,否则将返回新数组:

arr =[["csb#"], ["gcp30", "hdd"], ["gcp30", "hdd", "30", "no"], ["spl#"]]
arr.reject {|e| e.length == 1 }
#=> [["gcp30", "hdd"], ["gcp30", "hdd", "30", "no"]]
arr.reject! {|e| e.length == 1 }
#=> [["gcp30", "hdd"], ["gcp30", "hdd", "30", "no"]]
arr
#=> [["gcp30", "hdd"], ["gcp30", "hdd", "30", "no"]]
,或
选择!
,也可用于相同的功能:

arr = [["csb#"], ["gcp30", "hdd"], ["gcp30", "hdd", "30", "no"], ["spl#"]]
#=> [["csb#"], ["gcp30", "hdd"], ["gcp30", "hdd", "30", "no"], ["spl#"]]
arr.select! {|e| e.length != 1 }
#=> [["gcp30", "hdd"], ["gcp30", "hdd", "30", "no"]]
只是为了好玩:

arr.reject {|e| e[1..-1].empty? }
=> [["gcp30", "hdd"], ["gcp30", "hdd", "30", "no"]]
如果确定数组不包含零上的布尔值,则以下解决方案有效:

甚至:

arr.map { |e| e if e[1] }.compact
或者与选择几乎相同(感谢@engineersmnky):

只是为了好玩:

arr.reject {|e| e[1..-1].empty? }
=> [["gcp30", "hdd"], ["gcp30", "hdd", "30", "no"]]
如果确定数组不包含零上的布尔值,则以下解决方案有效:

甚至:

arr.map { |e| e if e[1] }.compact
或者与选择几乎相同(感谢@engineersmnky):


值得注意的是,最后一个解决方案还将输出一个空数组,因为
length!=1
,尽管从技术上讲,这仍然满足了“如何删除仅包含一个元素的子数组,例如[“csb#”]”的问题请注意,上一个解决方案还将输出一个空数组,因为
length!=1
,尽管从技术上讲,这仍然满足“如何删除仅包含一个元素的子数组”的问题,例如。[“csb#”]“请阅读”“包括链接页面”“和”。我们希望看到您努力的证据。您尝试了什么?您搜索了什么,但没有找到任何东西吗?您找到了东西但没有帮助吗?您尝试过编写代码吗?如果没有,原因是什么?如果是,哪一个最小的代码示例显示了您尝试了什么,为什么没有成功?如果没有,您看起来没有尝试,希望我们为您编写代码。请阅读“包括链接页面”和。我们希望看到您的努力的证据。您尝试了什么?您搜索了什么但没有找到任何东西吗?您找到了东西但没有帮助吗?您尝试过编写代码吗?如果没有,为什么?如果是,哪一个最小的代码示例显示了您尝试过的内容以及为什么不起作用?如果没有,您似乎没有尝试并希望我们为您编写。使用
map
中的像
if s
这样的条件迫使您使用
compact
来删除nil值。相反,
map
之前选择
拒绝
。必须清理生成的数组表明某些操作没有正确执行。@theTinMan,我感谢您的注释,但这只是-f或者有趣的解决方案,因为已经做了非常清楚和正确的答案。也许你在有趣中建议了它,但是我们看到人们在回答和问题时认真使用了它,这会导致其他人认为它比一开始就做对更合适或更可取。在
map
中使用像
if s
这样的条件强制您需要使用
compact
来删除nil值。相反,在
map
之前,
选择
拒绝
。必须清理生成的数组表明某些操作没有正确执行。@theTinMan,我感谢您的注释,但这只是为了好玩,因为已经有了非常清晰和正确的答案也许你是出于好玩才提出这个建议的,但是我们看到人们在回答和提问时会认真地使用它,这会导致其他人认为它比一开始就做对更合适或更可取。