[ruby] 괄호를 사용하면 블록 인수에 전달한 배열 중첩을 확장할 수 있습니다.

5222 단어 tips루비

결론



블록의 인수로 다음과 같은 배열을 확장하려는 경우,
인수를 ()로 묶어 확장 할 수 있습니다.
※1계층만
arr = [["hoge"], ["bar"], "foo"]
arr.each { |(ele)| 
  puts ele.length
}

다만 개인적으로는
flatten으로 쓰는 것이 나중에 검토 할 때 좋다고 생각합니다

비교



test.rb
#!/bin/ruby
arr = [["hoge"], ["bar"], "foo"]
arr.each { |ele| 
  puts ele.length 
  puts ele.class
}

puts '---'

arr.each { |(ele)| 
  puts ele.length 
  puts ele.class
}

실행해 보겠습니다.
$ ruby test.rb
1
Array
1
Array
3
String
---
4
String
3
String
3
String

덧붙여 차원이 1개 내려갈 뿐이므로, 중첩의 중첩 같은 것은 전개할 수 없는 것 같습니다.

test2.rb
#!/bin/ruby
arr = [["hoge"], ["bar"], "foo", [["piyo"]]]
arr.each { |(ele)| 
  puts ele.length 
  puts ele.class
}
$ ruby test2.rb
4
String
3
String
3
String
1
Array

단, 개인적으로는 이해하기 어려운 점과,
나 자신도 구조도 이해할 수 없는 점,
몇 계층까지 전개할지 지정할 수 있는 점을 고려하면 flatten
배열을 평탄화하는 방법을 사용하는 것이 더 좋을 것이라고 생각합니다.
cf. htps : // / cs. 루 by ぁん g. 오 rg/그럼/2. HTML

test3.rb
#!/bin/ruby
arr = [["hoge"], ["bar"], "foo", [["piyo"]]].flatten(1)
arr.each { |ele| 
  puts ele.length 
  puts ele.class
}
$ ruby test3.rb
4
String
3
String
3
String
1
Array

경위



다음 문제를 해결한 후 다른 사람의 답변을 보고 있던 곳
이번 글을 찾았다
htps // 유키코에서 r. 메/p로 b㎇ms/의/345

좋은 웹페이지 즐겨찾기