2

いくつかの配列を反復処理し、名前の配列から動的に名前を付けたいと思います。nameこのようなものは、からの要素に置き換えnames arrayます...

names=[a, b, c]
names.each{|name|
name_array1=[]
name_array2=[]
name_array[0][0].each{|i|                           
    if i>0
        name_array1.push([i])
    end
    if i<0
        name_array2.push([i])
    end
  }
}

基本的に配列a_array1を作成します、、、、、、、、、、、a_array2a_array[0][0]b_array1b_array2b_array[0][0]c_array1c_array2c_array[0][0]

これも可能ですか?

4

1 に答える 1

6

Rubyは動的ローカル変数名1をサポートしていません。

ただし、これはハッシュを使用して簡単に表すことができます。ハッシュはキーを値にマップします。この場合、キーは「名前」を表し、値は配列です。

# use Symbols for names, although Strings would work too
names = [:a, :b, :c]

# create a new hash
my_arrays = {}

# add some arrays to our hash
names.each_with_index { |name, index|
   array = [index] * (index + 1)
   my_arrays[name] = array
}

# see what we have
puts my_arrays

# access "by name"
puts my_arrays[:b]

(副作用なしで上記を書く方法はありますが、これは出発点であるはずです。)


1動的インスタンス/クラス変数名は別の話ですが、今のところ「高度なトピック」として残すのが最善であり、現在のタスクには適用できません。以前(Ruby 1.8.x)は、evalローカル変数のバインディングを変更するために使用できましたが、これは決して「良い」アプローチではなく、新しいバージョンでは機能しません。

于 2013-01-30T01:55:41.673 に答える