루비 - 배열 테스트
올바른 방법은 무엇입니까?
is_array("something") # => false (or 1)
is_array(["something", "else"]) # => true (or > 1)
아니면 그 안에 있는 물건들의 개수를 얻기 위해?
사용할 수 있습니다.
>> s = "something"
=> "something"
>> s.kind_of?(Array)
=> false
>> s = ["something", "else"]
=> ["something", "else"]
>> s.kind_of?(Array)
=> true
배열이 필요한 것이 확실합니까?다음을 사용할 수 있습니다.respond_to?(method)
따라서 당신의 코드는 배열이 아닐 수도 있는 유사한 것들(아마도 다른 숫자로 셀 수 있는 것)에 대해 작동할 것입니다.만약 당신이 실제로 필요하다면.array
그리고 나서 그것을 설명하는 게시물.Array#kind\_of?
방법이 가장 좋습니다.
['hello'].respond_to?('each')
테스트하는 대신Array,
그냥 당신이 얻는 것을 하나의 수준으로 변환하세요.Array,
그래서 당신의 코드는 하나의 사건만 처리하면 됩니다.
t = [*something] # or...
t = Array(something) # or...
def f *x
...
end
루비는 객체나 객체의 배열을 취할 수 있는 API를 조화시킬 수 있는 다양한 방법을 가지고 있는데, 왜 당신이 어떤 것이 배열인지 알고 싶어하는지 추측하여 제안합니다.
스플랫 연산자는 당신이 찾을 수 있는 많은 마법을 포함하고 있거나, 당신은 그냥 전화할 수 있습니다.Array(something)
필요한 경우 배열 래퍼를 추가합니다.와 비슷합니다.[*something]
이 경우에는
def f x
p Array(x).inspect
p [*x].inspect
end
f 1 # => "[1]"
f [1] # => "[1]"
f [1,2] # => "[1, 2]"
또는 매개 변수 선언에 스플랫을 사용한 다음.flatten
당신에게 다른 종류의 수집가를 제공합니다. (그 문제에 대해서는, 당신은 전화할 수 있습니다..flatten
위에도.)
def f *x
p x.flatten.inspect
end # => nil
f 1 # => "[1]"
f 1,2 # => "[1, 2]"
f [1] # => "[1]"
f [1,2] # => "[1, 2]"
f [1,2],3,4 # => "[1, 2, 3, 4]"
그리고, 그레그슐롬 덕분에, 가끔은 그냥 사용하는 것이 더 빠릅니다.Array(x)
왜냐하면 그것이 이미 있을 때.Array
새 개체를 만들 필요가 없습니다.
[1,2,3].is_a? Array
참으로 평가됩니다.
마치 아이템의 개념을 가진 무언가를 추구하는 것처럼 들립니다.그러므로 나는 그것이 가능한지 보는 것을 추천합니다.Enumerable
그것은 또한 의 존재를 보장합니다.#count
.
예를들면,
[1,2,3].is_a? Enumerable
[1,2,3].count
에 주의하십시오.size
,length
그리고.count
모든 작업이 어레이에서 수행됩니다.count
여기서 올바른 의미는 - (예를 들어,'abc'.length
그리고.'abc'.size
두 가지 일 모두, 하지만'abc'.count
그런 식으로 작동하지 않습니다).
주의: 문자열이 _a입니까?열거할 수 있습니다. 그래서 아마 이것은 당신이 원하는 것이 아닐 것입니다.배열과 같은 개체에 대한 개념에 따라 달라집니다.
시도:
def is_array(a)
a.class == Array
end
편집: 다른 대답이 제 대답보다 훨씬 낫습니다.
또한 사용을 고려합니다.Array()
Ruby Community Style 가이드에서 다음을 수행합니다.
배열로 처리할 변수를 처리할 때는 명시적 배열 확인 또는 [*var] 대신 배열()을 사용합니다.
# bad
paths = [paths] unless paths.is_a? Array
paths.each { |path| do_something(path) }
# bad (always creates a new Array instance)
[*paths].each { |path| do_something(path) }
# good (and a bit more readable)
Array(paths).each { |path| do_something(path) }
언급URL : https://stackoverflow.com/questions/1527888/ruby-test-for-array
'programing' 카테고리의 다른 글
URL에서 파일을 다운로드하여 레일즈에 저장하려면 어떻게 해야 합니까? (0) | 2023.05.31 |
---|---|
KDiff3를 git에 대한 병합 도구 및 diff 도구로 구성하려면 어떻게 해야 합니까? (0) | 2023.05.31 |
Postgre에서 날짜로부터 연도와 월을 추출하는 방법to_char() 함수를 사용하지 않는 SQL? (0) | 2023.05.31 |
모듈 대신 사용자 양식에 코드를 입력하는 것에 단점이 있습니까? (0) | 2023.05.31 |
해시 값을 변경하는 방법? (0) | 2023.05.31 |