在Array中查找值

时间:2009-11-14 14:00:15

标签: ruby

如何使用Ruby 1.8.7在Array中找到值?

11 个答案:

答案 0 :(得分:108)

我猜你正试图找出数组中是否存在某个值,如果是这种情况,你可以使用Array #include?(value):

a = [1,2,3,4,5]
a.include?(3)   # => true
a.include?(9)   # => false

如果您的意思是其他,请查看Ruby Array API

答案 1 :(得分:62)

使用describe('The directive', function() { var element, $scope, controller; beforeEach(module('app')); beforeEach(module('path/to/template.html')); beforeEach(inject(function($compile, $controller, $rootScope, $templateCache) { template = $templateCache.get('path/to/template.html'); $templateCache.put('path/to/template.html', template); $scope = $rootScope; controller = $controller; var elm = angular.element('<div directive></div>'); element = $compile(elm)($scope); $scope.$digest(); theController = element.controller('directive', { $scope: $scope }); })); it('should compile', function() { expect(element.html()).not.toBeNull(); }); describe('$scope.add', function() { beforeEach(inject(function() { add = theController.add(); })); it('should be defined', function() { expect(add).toBeDefined(); // passes }); // Now what??? }); }); 将为您提供符合条件的元素数组。但是,如果您正在寻找一种将元素从符合条件的数组中删除的方法,Array#select将是更好的方法:

Enumerable#detect

否则你必须做一些尴尬的事情,如:

array = [1,2,3]
found = array.select {|e| e == 3} #=> [3]
found = array.detect {|e| e == 3} #=> 3

答案 2 :(得分:23)

喜欢这个吗?

a = [ "a", "b", "c", "d", "e" ]
a[2] +  a[0] + a[1]    #=> "cab"
a[6]                   #=> nil
a[1, 2]                #=> [ "b", "c" ]
a[1..3]                #=> [ "b", "c", "d" ]
a[4..7]                #=> [ "e" ]
a[6..10]               #=> nil
a[-3, 3]               #=> [ "c", "d", "e" ]
# special cases
a[5]                   #=> nil
a[5, 1]                #=> []
a[5..10]               #=> []

还是喜欢这个?

a = [ "a", "b", "c" ]
a.index("b")   #=> 1
a.index("z")   #=> nil

See the manual

答案 3 :(得分:19)

您可以使用Array.selectArray.index来执行此操作。

答案 4 :(得分:15)

使用:

myarray.index "valuetoFind"

如果您的数组不包含该值,那将返回您想要的元素的索引或nil。

答案 5 :(得分:13)

如果要从数组中找到一个值,请使用Array#find

arr = [1,2,6,4,9] 
arr.find {|e| e%3 == 0}   #=>  6
arr.select {|e| e%3 == 0} #=> [ 6, 9 ]

6.in?

要查找除#includes?之外的数组中是否存在值,您还可以在使用ActiveSupport时使用#in?,这对任何响应#include?的对象都有效:

arr = [1, 6]
6.in? arr
#=> true

答案 6 :(得分:9)

这个答案适用于所有认识到已接受的答案并未解决目前所写问题的人。

该问题询问如何查找数组中的值。接受的答案显示了如何检查数组中的值是否存在

已有使用index的示例,因此我提供了使用select方法的示例。

1.9.3-p327 :012 > x = [1,2,3,4,5]
  => [1, 2, 3, 4, 5] 
1.9.3-p327 :013 > x.select {|y| y == 1}
  => [1]

答案 7 :(得分:8)

我知道这个问题已经得到解答了,但我来到这里寻找一种基于某些标准过滤数组中元素的方法。所以这是我的解决方案示例:使用select,我发现Class中以“RUBY _”开头的所有常量

Class.constants.select {|c| c.to_s =~ /^RUBY_/ }

更新:与此同时,我发现Array#grep工作得更好。对于上面的例子,

Class.constants.grep /^RUBY_/

做了这个伎俩。

答案 8 :(得分:1)

感谢您的回复。

我确实喜欢这个:

puts 'find' if array.include?(value)

答案 9 :(得分:1)

您可以使用数组方法。

要查看所有数组方法,请对数组使用methods函数。 例如,

a = ["name", "surname"] 
a.methods

通过这种方式,您可以使用不同的方法来检查数组中的值 您可以使用a.include?("name")

答案 10 :(得分:0)

let arr = [
    { name:"string 1", value:"this", other: "that" },
    { name:"string 2", value:"this", other: "that" }
];

let h = arr.find(x => x.name == 'string 1') ?? arr[0]

console.log(h);