如果我在Ruby中有一个变量数组:
a = 4
b = 7
c = 1
array = [a, b, c]如何访问具有最高值的变量的名称?(在本例中,b)我希望检索对具有最高值的元素的引用,以便以后能够操作它:
b += 10 我尝试过array.max,但它只返回最大值7
发布于 2015-12-22 03:56:09
当您通过编写array = [a, b, c]构建数组时,数组中的点不会与名为a、b和c的变量保留任何类型的关联,因此您无法准确地完成您正在讨论的内容。这些变量可以在不影响数组的情况下进行更改。
您可以改变存储数据的方式,以使之成为可能,但是如果不知道您正在存储哪些数据,那么很难推荐一种好的方法。您可以考虑将数据存储在散列中,而不是存储在松散变量和数组中:
hash = { a: 4, b: 7, c: 1}发布于 2015-12-22 04:07:38
Ruby不支持通过引用传递对象,这在本质上就是您要做的事情。调用array.max时,将向您传递Fixnum 7的一个副本,并对此副本应用赋值和修改。
也就是说,您不能存储对此Array元素的引用,并在以后修改它。但是,您可以在现场修改最大值,但可以使用:
array[array.index(array.max)] = array.max + 10
#=> 17
array
#=> [4, 17, 1]注意,当Array中有重复值时,array.index(array.max)将返回第一个值的索引。
存储索引以供以后使用并不是一个可靠的解决方案,因为,虽然Array中的Array是有序的,但Array或其元素可以在检索索引的点和决定更改相应值的点之间进行修改。
另一个答案建议有一种模仿参照传递行为的方法,但是在这样做的过程中,你违背了语言的意图,这可能会导致很大的痛苦。
发布于 2015-12-22 04:09:57
你可以用Array#index来做这个。
1.9.3-p484 :008 > max_elem = array.index(array.max)
=> 1
1.9.3-p484 :009 > array[max_elem] = array[max_elem] + 10
=> 11
1.9.3-p484 :010 > array
=> [4, 17, 1]
1.9.3-p484 :011 >https://stackoverflow.com/questions/34408067
复制相似问题